cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

fix/drop-hero-notarization-note
goq / portal / enrollment.test.mjs
enrollment.test.mjs 2.4K
1import assert from 'node:assert/strict';2import test from 'node:test';34import {5 formatInvitationExpiry,6 grantLabel,7 normalizeInvitationSummary,8 shortPeerFingerprint,9} from './enrollment.mjs';1011const HOST = '12'.repeat(32);12const PEER = 'ab'.repeat(32);1314test('normalizes only a bounded public invitation summary', () => {15 const summary = normalizeInvitationSummary({16 host_node_id: HOST,17 peer_node_id: PEER,18 expires_at_unix: 1_100,19 grants: ['view', 'gamepad'],20 }, 1_000);21 assert.equal(summary.hostFingerprint, '12121212…12121212');22 assert.equal(summary.peerFingerprint, 'abababab…abababab');23 assert.deepEqual(summary.grants, ['view', 'gamepad']);24 assert.equal(summary.viewOnly, false);25 assert.equal(summary.inputCapable, true);26 assert.equal('token' in summary, false);27});2829test('rejects expired, malformed, duplicate, unknown, and raw-token-bearing summaries', () => {30 const base = { host_node_id: HOST, peer_node_id: PEER, expires_at_unix: 1_100, grants: ['view'] };31 assert.throws(() => normalizeInvitationSummary({ ...base, expires_at_unix: 1_000 }, 1_000));32 assert.throws(() => normalizeInvitationSummary({ ...base, host_node_id: 'nope' }, 1_000));33 assert.throws(() => normalizeInvitationSummary({ ...base, grants: ['view', 'view'] }, 1_000));34 assert.throws(() => normalizeInvitationSummary({ ...base, grants: ['admin'] }, 1_000));35 assert.throws(() => normalizeInvitationSummary({ ...base, input_capable: true }, 1_000));36 assert.throws(() => normalizeInvitationSummary({ ...base, view_only: false }, 1_000));37 assert.throws(() => normalizeInvitationSummary({ ...base, token: 'secret' }, 1_000));38});3940test('reports view-only invitation eligibility explicitly', () => {41 const summary = normalizeInvitationSummary({42 host_node_id: HOST,43 peer_node_id: PEER,44 expires_at_unix: 1_100,45 grants: ['view'],46 view_only: true,47 input_capable: false,48 }, 1_000);49 assert.equal(summary.viewOnly, true);50 assert.equal(summary.inputCapable, false);51});5253test('formats fingerprints, grants, and bounded expiry copy', () => {54 assert.equal(shortPeerFingerprint(PEER), 'abababab…abababab');55 assert.equal(grantLabel('pointer_keyboard'), 'keyboard + mouse');56 assert.equal(formatInvitationExpiry(1_030, 1_000), 'expires in under 2 minutes');57 assert.equal(formatInvitationExpiry(1_121, 1_000), 'expires in 3 minutes');58 assert.equal(formatInvitationExpiry(999, 1_000), 'expired');59});