98 lines
3.2 KiB
JavaScript
98 lines
3.2 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
require('../src/common');
|
|
|
|
const { registerInitialFontSyncTask } = require('../src/web/lib/background-tasks/tasks-startup/font-sync');
|
|
const { registerFontSyncTask } = require('../src/web/lib/background-tasks/tasks-adhoc/font-sync');
|
|
|
|
test('initial font 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 registerInitialFontSyncTask({
|
|
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-font-sync' && task.title === 'Initial font sync' && task.taskType === 'font-sync';
|
|
}));
|
|
});
|
|
|
|
test('font sync task fails when a required player upload is unsuccessful', async () => {
|
|
let handler = null;
|
|
registerFontSyncTask({
|
|
backgroundTaskQueue: {
|
|
setTaskHandler(taskType, taskHandler) {
|
|
assert.equal(taskType, 'font-sync');
|
|
handler = taskHandler;
|
|
}
|
|
},
|
|
uploadSyncService: {
|
|
async pushUploadFileToPlayer() { return false; },
|
|
async removeUploadFileFromPlayer() { return false; }
|
|
}
|
|
});
|
|
|
|
await assert.rejects(handler({
|
|
payload: {
|
|
uploadDir: 'media',
|
|
playerIdentifier: 'player-local',
|
|
requireSuccess: true,
|
|
operations: [{ type: 'put', uploadPath: '/media/assets/fonts/test.ttf' }]
|
|
}
|
|
}), /Unable to synchronize \/media\/assets\/fonts\/test\.ttf to player player-local\./);
|
|
|
|
await assert.rejects(handler({
|
|
payload: {
|
|
uploadDir: 'media',
|
|
playerIdentifier: 'player-local',
|
|
requireSuccess: true,
|
|
operations: [{ type: 'delete', uploadPath: '/media/assets/fonts/old.ttf' }]
|
|
}
|
|
}), /Unable to remove \/media\/assets\/fonts\/old\.ttf from player player-local\./);
|
|
});
|