104 lines
3.4 KiB
JavaScript
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');
|
|
}); |