158 lines
4.9 KiB
JavaScript
158 lines
4.9 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const express = require('express');
|
|
|
|
require('../src/common');
|
|
|
|
const { createRequestAuthHeaders } = require('../src/request-auth');
|
|
const registerInternalSyncRoutes = require('../src/web/routes/internal/sync');
|
|
|
|
test('player media sync requests are queued as background tasks', async () => {
|
|
const originalSecret = process.env.PULSE_SIGNAGE_SHARED_SECRET;
|
|
process.env.PULSE_SIGNAGE_SHARED_SECRET = 'test-shared-secret';
|
|
|
|
const queuedTasks = [];
|
|
const app = express();
|
|
app.use(express.json());
|
|
|
|
registerInternalSyncRoutes(app, {
|
|
backgroundTaskQueue: {
|
|
async enqueueTask(definition) {
|
|
queuedTasks.push(definition);
|
|
return {
|
|
id: 42,
|
|
key: definition.key,
|
|
taskType: definition.taskType,
|
|
title: definition.title,
|
|
category: definition.category,
|
|
status: 'queued',
|
|
createdAt: new Date().toISOString(),
|
|
startedAt: '',
|
|
finishedAt: '',
|
|
errorMessage: '',
|
|
attempts: 0,
|
|
metadata: definition.metadata,
|
|
payload: definition.payload
|
|
};
|
|
}
|
|
},
|
|
uploadSyncService: {},
|
|
mediaDir: 'e:/Projects Git/pulse-signage/media'
|
|
});
|
|
|
|
app.use(function (error, _req, res, _next) {
|
|
res.status(error.statusCode || 500).json({ error: String(error && error.message ? error.message : error) });
|
|
});
|
|
|
|
const server = app.listen(0);
|
|
|
|
try {
|
|
const address = server.address();
|
|
const body = {
|
|
deviceId: 'player-remote',
|
|
playerPublicBaseUrl: 'https://player.example.test',
|
|
playerInternalBaseUrl: 'http://player-bridge:8090'
|
|
};
|
|
const headers = Object.assign({
|
|
'content-type': 'application/json'
|
|
}, createRequestAuthHeaders({
|
|
method: 'POST',
|
|
pathname: '/api/internal/sync/player-media',
|
|
body: body
|
|
}));
|
|
|
|
const response = await fetch(`http://127.0.0.1:${address.port}/api/internal/sync/player-media`, {
|
|
method: 'POST',
|
|
headers: headers,
|
|
body: JSON.stringify(body)
|
|
});
|
|
|
|
assert.equal(response.status, 202);
|
|
assert.equal(queuedTasks.length, 1);
|
|
assert.equal(queuedTasks[0].key, 'player-media-sync');
|
|
assert.equal(queuedTasks[0].taskType, 'media-sync');
|
|
assert.equal(queuedTasks[0].payload.mode, 'initial');
|
|
assert.equal(queuedTasks[0].payload.playerIdentifier, 'player-remote');
|
|
assert.equal(queuedTasks[0].metadata.playerLabel, 'player-remote');
|
|
} finally {
|
|
await new Promise(function (resolve) {
|
|
server.close(resolve);
|
|
});
|
|
process.env.PULSE_SIGNAGE_SHARED_SECRET = originalSecret;
|
|
}
|
|
});
|
|
|
|
test('player font sync requests are queued as background tasks', async () => {
|
|
const originalSecret = process.env.PULSE_SIGNAGE_SHARED_SECRET;
|
|
process.env.PULSE_SIGNAGE_SHARED_SECRET = 'test-shared-secret';
|
|
|
|
const queuedTasks = [];
|
|
const app = express();
|
|
app.use(express.json());
|
|
|
|
registerInternalSyncRoutes(app, {
|
|
backgroundTaskQueue: {
|
|
async enqueueTask(definition) {
|
|
queuedTasks.push(definition);
|
|
return {
|
|
id: 43,
|
|
key: definition.key,
|
|
taskType: definition.taskType,
|
|
title: definition.title,
|
|
category: definition.category,
|
|
status: 'queued',
|
|
createdAt: new Date().toISOString(),
|
|
startedAt: '',
|
|
finishedAt: '',
|
|
errorMessage: '',
|
|
attempts: 0,
|
|
metadata: definition.metadata,
|
|
payload: definition.payload
|
|
};
|
|
}
|
|
},
|
|
uploadSyncService: {},
|
|
mediaDir: 'e:/Projects Git/pulse-signage/media'
|
|
});
|
|
|
|
app.use(function (error, _req, res, _next) {
|
|
res.status(error.statusCode || 500).json({ error: String(error && error.message ? error.message : error) });
|
|
});
|
|
|
|
const server = app.listen(0);
|
|
|
|
try {
|
|
const address = server.address();
|
|
const body = {
|
|
deviceId: 'player-remote',
|
|
playerPublicBaseUrl: 'https://player.example.test',
|
|
playerInternalBaseUrl: 'http://player-bridge:8090'
|
|
};
|
|
const headers = Object.assign({
|
|
'content-type': 'application/json'
|
|
}, createRequestAuthHeaders({
|
|
method: 'POST',
|
|
pathname: '/api/internal/sync/player-font',
|
|
body: body
|
|
}));
|
|
|
|
const response = await fetch(`http://127.0.0.1:${address.port}/api/internal/sync/player-font`, {
|
|
method: 'POST',
|
|
headers: headers,
|
|
body: JSON.stringify(body)
|
|
});
|
|
|
|
assert.equal(response.status, 202);
|
|
assert.equal(queuedTasks.length, 1);
|
|
assert.equal(queuedTasks[0].key, 'player-font-sync');
|
|
assert.equal(queuedTasks[0].taskType, 'font-sync');
|
|
assert.equal(queuedTasks[0].payload.mode, 'initial');
|
|
assert.equal(queuedTasks[0].payload.playerIdentifier, 'player-remote');
|
|
assert.equal(queuedTasks[0].metadata.playerLabel, 'player-remote');
|
|
} finally {
|
|
await new Promise(function (resolve) {
|
|
server.close(resolve);
|
|
});
|
|
process.env.PULSE_SIGNAGE_SHARED_SECRET = originalSecret;
|
|
}
|
|
}); |