Files
projects/Dockers/xtream-ppv-bundler/test/epg.test.js
T
Bram 91f22b54b4
Build and Push Docker Images / build-and-push (push) Successful in 36s
xtream bundler
2026-11-06 19:24:39 +01:00

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&#232;ge') === false);
assert.ok(xml.includes('Standard de Liège - SK Beveren'));
assert.ok(xml.includes('Anderlecht &amp; Genk'));
assert.ok(xml.includes('Club Brugge - Antwerp'));
});
test('escapes XML and formats UTC dates', () => {
assert.equal(xmlEscape('a & <b> "c" \'d\''), 'a &amp; &lt;b&gt; &quot;c&quot; &apos;d&apos;');
assert.equal(xmltvDate(new Date('2026-11-06T18:25:00Z')), '20261106182500 +0000');
});