134 lines
3.5 KiB
JavaScript
134 lines
3.5 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
require('../src/common');
|
|
|
|
const { createPlayerActionService } = require('../src/web/lib/player-actions');
|
|
|
|
test('player actions prefer the exact configured player registration over a remote FQDN row', async () => {
|
|
const fetchCalls = [];
|
|
const originalFetch = global.fetch;
|
|
global.fetch = async function (url, init) {
|
|
fetchCalls.push({ url, init });
|
|
return {
|
|
ok: true,
|
|
status: 200,
|
|
headers: {
|
|
get() {
|
|
return null;
|
|
}
|
|
},
|
|
async json() {
|
|
return { ok: true };
|
|
},
|
|
async text() {
|
|
return JSON.stringify({ ok: true });
|
|
}
|
|
};
|
|
};
|
|
|
|
const playerActionService = createPlayerActionService({
|
|
common: {},
|
|
pool: {
|
|
async query() {
|
|
return [[
|
|
{
|
|
identifier: 'player-local',
|
|
internal_base_url: 'http://player:8081'
|
|
},
|
|
{
|
|
identifier: 'player-remote',
|
|
internal_base_url: 'https://pulse-dev-bridge.lzstealth.com'
|
|
}
|
|
]];
|
|
}
|
|
}
|
|
});
|
|
|
|
const originalIdentifier = process.env.PLAYER_IDENTIFIER;
|
|
process.env.PLAYER_IDENTIFIER = 'player-local';
|
|
|
|
try {
|
|
const response = await playerActionService.forwardPlayerCommand('demo', { command: 'refresh' });
|
|
|
|
assert.deepEqual(response, { ok: true });
|
|
assert.equal(fetchCalls.length, 1);
|
|
assert.equal(fetchCalls[0].url, 'http://player:8081/api/screens/demo/commands');
|
|
} finally {
|
|
process.env.PLAYER_IDENTIFIER = originalIdentifier;
|
|
global.fetch = originalFetch;
|
|
}
|
|
});
|
|
|
|
test('player actions merge screen connections from every recent player registration', async () => {
|
|
const fetchCalls = [];
|
|
const originalFetch = global.fetch;
|
|
global.fetch = async function (url, init) {
|
|
fetchCalls.push({ url, init });
|
|
if (String(url).includes('player-a.example')) {
|
|
return {
|
|
ok: true,
|
|
status: 200,
|
|
headers: { get() { return null; } },
|
|
async json() {
|
|
return {
|
|
screenSlug: 'demo',
|
|
connections: [
|
|
{ id: 'a-1', playerPublicBaseUrl: 'http://player-a.example' }
|
|
]
|
|
};
|
|
},
|
|
async text() {
|
|
return JSON.stringify({ ok: true });
|
|
}
|
|
};
|
|
}
|
|
|
|
return {
|
|
ok: true,
|
|
status: 200,
|
|
headers: { get() { return null; } },
|
|
async json() {
|
|
return {
|
|
screenSlug: 'demo',
|
|
connections: [
|
|
{ id: 'b-1', playerPublicBaseUrl: 'http://player-b.example' }
|
|
]
|
|
};
|
|
},
|
|
async text() {
|
|
return JSON.stringify({ ok: true });
|
|
}
|
|
};
|
|
};
|
|
|
|
const playerActionService = createPlayerActionService({
|
|
common: {},
|
|
pool: {
|
|
async query() {
|
|
return [[
|
|
{
|
|
identifier: 'player-a',
|
|
public_base_url: 'http://player-a.example',
|
|
last_seen_at: new Date().toISOString()
|
|
},
|
|
{
|
|
identifier: 'player-b',
|
|
public_base_url: 'http://player-b.example',
|
|
last_seen_at: new Date().toISOString()
|
|
}
|
|
]];
|
|
}
|
|
}
|
|
});
|
|
|
|
try {
|
|
const response = await playerActionService.getScreenConnections('demo');
|
|
|
|
assert.equal(response.count, 2);
|
|
assert.deepEqual(response.connections.map(function (connection) { return connection.id; }), ['a-1', 'b-1']);
|
|
assert.equal(fetchCalls.length, 2);
|
|
} finally {
|
|
global.fetch = originalFetch;
|
|
}
|
|
}); |