const test = require('node:test'); const assert = require('node:assert/strict'); const backendSearch = require('../server/services/flexibleChannelSearch'); const frontendProjection = require('../public/js/services/liveChannelProjection.js'); function channel(displayName) { return { displayName, standardName: displayName, fingerprint: displayName.toLowerCase(), variants: [{ name: `${displayName} HD`, tvgId: displayName.replace(/\s+/g, '.').toLowerCase(), categoryName: 'Sports', groupTitle: 'Sports' }] }; } test('backend beIN search keeps singular/plural tolerance without matching Max channels', () => { assert.equal(backendSearch.matchesSearch(channel('beIN Sports 1'), 'bein sports 1'), true); assert.equal(backendSearch.matchesSearch(channel('beIN Sports 1'), 'Bein Sport 1'), true); assert.equal(backendSearch.matchesSearch(channel('beIN Sports Max 10'), 'bein sports 1'), false); assert.equal(backendSearch.matchesSearch(channel('beIN Sports Max 4'), 'bein sports 1'), false); assert.equal(backendSearch.matchesSearch(channel('beIN Sports 2'), 'bein sports 1'), false); assert.equal(backendSearch.matchesSearch(channel('beINSports1'), 'bein sports 1'), true); assert.equal(backendSearch.matchesSearch(channel('beIN Sports 01'), 'bein sports 1'), true); }); test('frontend local beIN search mirrors backend Max-channel exclusion', () => { assert.equal(frontendProjection.matchesSearch(channel('beIN Sports 1'), 'bein sports 1'), true); assert.equal(frontendProjection.matchesSearch(channel('beIN Sports 1'), 'Bein Sport 1'), true); assert.equal(frontendProjection.matchesSearch(channel('beIN Sports Max 10'), 'bein sports 1'), false); assert.equal(frontendProjection.matchesSearch(channel('beIN Sports Max 4'), 'bein sports 1'), false); assert.equal(frontendProjection.matchesSearch(channel('beIN Sports 2'), 'bein sports 1'), false); assert.equal(frontendProjection.matchesSearch(channel('beINSports1'), 'bein sports 1'), true); assert.equal(frontendProjection.matchesSearch(channel('beIN Sports 01'), 'bein sports 1'), true); });