fix: group beIN Sports 1 variants and clarify Laya language warning (#15)
beIN Sports 1 variants stayed separated after projection because names with region prefixes (C Car, C Reu, Thai), time-shift suffixes (2h/4h/8h/12h) and language markers (En, Fr, Thai) produced distinct fingerprints. Extend normalization in the server projection service and the frontend grouping fallback to fold these into one logical channel, with tests on the exact reported names. Clarify the Laya language detection warning so a language-matching failure is not mistaken for a grouping failure, and bump script versions for cache refresh. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const {
|
||||
normalizeChannelName,
|
||||
projectCatalog,
|
||||
serializeChannels,
|
||||
startRebuild
|
||||
@ -63,12 +64,40 @@ test('projects beIN quality variants into one logical channel', () => {
|
||||
assert.deepEqual(groups[0].variants.map(variant => variant.variantRank), [0, 1, 2]);
|
||||
});
|
||||
|
||||
test('normalizes the captured beIN Sports 1 aliases to one exact fingerprint', () => {
|
||||
const aliases = [
|
||||
'C Car beIN Sports 1',
|
||||
'C Reu beIN Sports 1',
|
||||
'Thai beIN Sports 1 Thai',
|
||||
'beIN Sports 1',
|
||||
'beIN Sports 1 12h',
|
||||
'beIN Sports 1 2h',
|
||||
'beIN Sports 1 4h',
|
||||
'beIN Sports 1 8h',
|
||||
'beIN Sports 1 Appel',
|
||||
'beIN Sports 1 En',
|
||||
'beIN Sports 1 Fr',
|
||||
'beIN Sports 1 Tod'
|
||||
];
|
||||
assert.deepEqual(aliases.map(normalizeChannelName), Array(aliases.length).fill('bein sports 1'));
|
||||
const groups = projectCatalog(aliases.map((name, index) => item(index, name)));
|
||||
assert.equal(groups.length, 1);
|
||||
assert.equal(groups[0].fingerprint, 'bein sports 1');
|
||||
assert.equal(groups[0].variants.length, aliases.length);
|
||||
});
|
||||
|
||||
test('does not merge distinct numbered beIN channels', () => {
|
||||
const groups = projectCatalog([
|
||||
item('1', 'beIN Sports 1 HD'),
|
||||
item('2', 'beIN Sports 2 HD')
|
||||
]);
|
||||
assert.deepEqual(groups.map(group => group.fingerprint), ['bein sports 1', 'bein sports 2']);
|
||||
assert.equal(normalizeChannelName('beIN Sports Max 10'), 'bein sports max 10');
|
||||
});
|
||||
|
||||
test('keeps unknown beIN suffixes distinct instead of applying fuzzy matching', () => {
|
||||
assert.equal(normalizeChannelName('Partner beIN Sports 1 Event'), 'bein sports 1 event');
|
||||
assert.notEqual(normalizeChannelName('Partner beIN Sports 1 Event'), normalizeChannelName('beIN Sports 1'));
|
||||
});
|
||||
|
||||
test('renaming a stream changes its projection membership and input hash', () => {
|
||||
|
||||
Reference in New Issue
Block a user