48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const { buildXmltv, xmlEscape, xmltvDate } = require('../src/epg');
|
|
|
|
function event(key, title, startIso, endIso, league = 'Jupiler Pro League') {
|
|
return {
|
|
key,
|
|
title,
|
|
league,
|
|
language: 'nl',
|
|
startAt: new Date(startIso),
|
|
endAt: new Date(endIso),
|
|
sources: [],
|
|
};
|
|
}
|
|
|
|
test('builds XMLTV with channels and projected programmes', () => {
|
|
const a = event('a', 'Standard de Liège - SK Beveren', '2026-11-06T18:25:00Z', '2026-11-06T20:55:00Z');
|
|
const b = event('b', 'Anderlecht & Genk', '2026-11-06T20:55:00Z', '2026-11-06T23:25:00Z');
|
|
const c = event('c', 'Club Brugge - Antwerp', '2026-11-06T20:55:00Z', '2026-11-06T23:25:00Z');
|
|
const state = {
|
|
slots: [{ eventKey: 'a' }, { eventKey: null }, { eventKey: null }],
|
|
events: new Map([['a', a]]),
|
|
upcoming: [a, b, c],
|
|
};
|
|
const scheduler = { state, getSlotCount: () => 3 };
|
|
|
|
const xml = buildXmltv(scheduler, Date.parse('2026-11-06T19:00:00Z'));
|
|
|
|
assert.ok(xml.startsWith('<?xml version="1.0" encoding="UTF-8"?>'));
|
|
assert.ok(xml.includes('<channel id="jupiler-1">'));
|
|
assert.ok(xml.includes('<channel id="jupiler-3">'));
|
|
assert.ok(xml.includes('start="20261106182500 +0000"'));
|
|
assert.ok(xml.includes('stop="20261106205500 +0000"'));
|
|
assert.ok(xml.includes('channel="jupiler-1"'));
|
|
assert.ok(xml.includes('Standard de Liège') === false);
|
|
assert.ok(xml.includes('Standard de Liège - SK Beveren'));
|
|
assert.ok(xml.includes('Anderlecht & Genk'));
|
|
assert.ok(xml.includes('Club Brugge - Antwerp'));
|
|
});
|
|
|
|
test('escapes XML and formats UTC dates', () => {
|
|
assert.equal(xmlEscape('a & <b> "c" \'d\''), 'a & <b> "c" 'd'');
|
|
assert.equal(xmltvDate(new Date('2026-11-06T18:25:00Z')), '20261106182500 +0000');
|
|
});
|