Multiple improvements
This commit is contained in:
@@ -277,6 +277,8 @@ async function loadApp({ language = 'de-DE' } = {}) {
|
||||
stop() {}
|
||||
},
|
||||
LocalRoutes: {
|
||||
async getAppPoi(_id, poiId) { return structuredClone(localRoute?.pois.find(poi => Number(poi.id) === Number(poiId)) || null); },
|
||||
releasePoiMedia() {},
|
||||
getAppRoute(id) {
|
||||
if (String(id) !== 'local-1' || !localRoute) throw new Error('lokal nicht gefunden');
|
||||
return structuredClone(localRoute);
|
||||
@@ -640,3 +642,43 @@ test('invalid API responses reject initialization and route selection errors res
|
||||
assert.deepEqual(errors, ['Strecke entfernt']);
|
||||
assert.equal(button.properties.get('disabled'), false);
|
||||
});
|
||||
|
||||
|
||||
test('local station playback loads only the selected station and ignores media arriving after leaving', async () => {
|
||||
const setup = await loadApp();
|
||||
const { context, harness } = setup;
|
||||
const ns = context.Wegwichtel;
|
||||
await ns.App.initialize({ markStep() {} });
|
||||
const button = new FakeNode('local-select');
|
||||
button.dataValues.set('route-source', 'local');
|
||||
button.dataValues.set('route-id', 'local-1');
|
||||
const requests = [];
|
||||
const released = [];
|
||||
ns.LocalRoutes.getAppPoi = (routeId, poiId) => new Promise(resolve => requests.push({ routeId, poiId, resolve }));
|
||||
ns.LocalRoutes.releasePoiMedia = poi => released.push(poi);
|
||||
const calls = observeSensors(setup);
|
||||
await harness.activate('[data-route-select]', button);
|
||||
assert.equal(requests.length, 0);
|
||||
const poiButton = new FakeNode('station');
|
||||
poiButton.dataValues.set('poi-id', 10);
|
||||
// Use the first actual local station ID rather than assuming server IDs.
|
||||
const local = ns.LocalRoutes.getAppRoute('local-1');
|
||||
poiButton.dataValues.set('poi-id', local.pois[0].id);
|
||||
await harness.activate('[data-poi-select]', poiButton);
|
||||
assert.equal(requests.length, 1);
|
||||
assert.equal(requests[0].routeId, 'local-1');
|
||||
assert.equal(requests[0].poiId, local.pois[0].id);
|
||||
const firstLoaded = { images: [{ url: 'blob:shown' }], audioUrl: 'blob:shown-audio' };
|
||||
requests[0].resolve(firstLoaded);
|
||||
await new Promise(resolve => setImmediate(resolve));
|
||||
assert.equal(calls.audio.at(-1), 'blob:shown-audio');
|
||||
assert.equal(calls.slides.at(-1)[0].url, 'blob:shown');
|
||||
await harness.activate('[data-poi-select]', poiButton);
|
||||
assert.equal(released[0], firstLoaded);
|
||||
await harness.activate('#stop-route', new FakeNode('stop'));
|
||||
const loaded = { images: [{ url: 'blob:late' }], audioUrl: 'blob:late-audio' };
|
||||
requests[1].resolve(loaded);
|
||||
await new Promise(resolve => setImmediate(resolve));
|
||||
assert.equal(released[1], loaded);
|
||||
assert.equal(calls.audio.includes('blob:late-audio'), false);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user