Files
pulse-signage/test/initial-media-sync-task.test.js
T
lzstealth b71958cb38
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile, web, pulse-signage-web) (push) Successful in 1m21s
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile.player, player, pulse-signage-player) (push) Successful in 32s
Release 2.22.0: normalize playlist schedules and unify player sync
2026-10-27 22:54:38 +00:00

104 lines
3.4 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
require('../src/common');
const { registerInitialMediaSyncTask } = require('../src/web/lib/background-tasks/tasks-startup/media-sync');
const { registerStartupTasks } = require('../src/web/lib/background-tasks');
test('initial media sync queues a separate task for each live player', async () => {
const queuedTasks = [];
const liveLastSeenAt = new Date(Date.now() - 10_000).toISOString();
const staleLastSeenAt = new Date(Date.now() - 5 * 60 * 1000).toISOString();
await registerInitialMediaSyncTask({
pool: {
async query() {
return [[
{
identifier: 'player-one',
public_base_url: 'https://player-one.example',
internal_base_url: 'http://player-one:8081',
last_seen_at: liveLastSeenAt
},
{
identifier: 'player-two',
public_base_url: 'https://player-two.example',
internal_base_url: 'http://player-two:8081',
last_seen_at: liveLastSeenAt
},
{
identifier: 'player-stale',
public_base_url: 'https://player-stale.example',
internal_base_url: 'http://player-stale:8081',
last_seen_at: staleLastSeenAt
}
]];
}
},
backgroundTaskQueue: {
async enqueueTask(definition) {
queuedTasks.push(definition);
return definition;
}
},
mediaDir: 'e:/Projects Git/pulse-signage/media',
uploadSyncService: {
async getPlayerTaskMetadata() {
return {};
}
}
});
assert.equal(queuedTasks.length, 2);
assert.deepEqual(queuedTasks.map(function (task) {
return task.metadata.playerIdentifier;
}).sort(), ['player-one', 'player-two']);
assert.deepEqual(queuedTasks.map(function (task) {
return task.payload.playerIdentifier;
}).sort(), ['player-one', 'player-two']);
assert.ok(queuedTasks.every(function (task) {
return task.key === 'initial-media-sync' && task.title === 'Initial media sync' && task.taskType === 'media-sync';
}));
});
test('startup registration queues the shared initial asset sync for a live direct player', async () => {
const queuedTasks = [];
const liveLastSeenAt = new Date(Date.now() - 10_000).toISOString();
const startupTasks = registerStartupTasks({
pool: {
async query() {
return [[{
identifier: 'player-local',
public_base_url: 'http://localhost:8081',
internal_base_url: 'http://player:8081',
last_seen_at: liveLastSeenAt
}]];
}
},
common: {
async fetchApiSourcesData() { return { apiSources: [] }; },
async fetchRssFeedsData() { return { rssFeeds: [] }; },
async fetchWeatherLocationsData() { return { weatherLocations: [] }; }
},
backgroundTaskQueue: {
async enqueueTask(definition) {
queuedTasks.push(definition);
return definition;
}
},
mediaDir: 'e:/Projects Git/pulse-signage/media',
uploadSyncService: {
async getPlayerTaskMetadata() { return {}; }
}
});
await startupTasks.initialize();
assert.equal(queuedTasks.length, 1);
assert.equal(queuedTasks[0].taskType, 'media-sync');
assert.equal(queuedTasks[0].key, 'initial-media-sync');
assert.equal(queuedTasks[0].payload.playerIdentifier, 'player-local');
assert.equal(queuedTasks[0].payload.mode, 'initial');
});