46 lines
1.2 KiB
JavaScript
46 lines
1.2 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { createRealtimeServer } from './realtime-server.mjs';
|
|
import WebSocket from 'ws';
|
|
|
|
test('broadcasts focus events to other connected clients', async () => {
|
|
const server = createRealtimeServer(0);
|
|
await new Promise((resolve) => server.listen(resolve));
|
|
const { port } = server.address();
|
|
|
|
try {
|
|
const screen = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
const controller = new WebSocket(`ws://127.0.0.1:${port}`);
|
|
|
|
await Promise.all([
|
|
new Promise((resolve) => screen.once('open', resolve)),
|
|
new Promise((resolve) => controller.once('open', resolve)),
|
|
]);
|
|
|
|
const received = new Promise((resolve) => {
|
|
screen.once('message', (data) => resolve(JSON.parse(data)));
|
|
});
|
|
|
|
controller.send(JSON.stringify({
|
|
type: 'FOCUS_NAME',
|
|
cloudId: 'demo',
|
|
name: 'Sophia',
|
|
messageId: 'focus-1',
|
|
sentAt: 1,
|
|
}));
|
|
|
|
assert.deepEqual(await received, {
|
|
type: 'FOCUS_NAME',
|
|
cloudId: 'demo',
|
|
name: 'Sophia',
|
|
messageId: 'focus-1',
|
|
sentAt: 1,
|
|
});
|
|
|
|
screen.close();
|
|
controller.close();
|
|
} finally {
|
|
await new Promise((resolve) => server.close(resolve));
|
|
}
|
|
});
|