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'); 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'; })); });