protocol.test.ts
1 import assert from 'node:assert/strict' 2 import { test } from 'node:test' 3 import { 4 createGatewayRequestFrame, 5 parseGatewayFrame, 6 serializeGatewayFrame, 7 } from './protocol' 8 9 test('gateway protocol parses request/response/event frames', () => { 10 const req = parseGatewayFrame('{"type":"req","id":"1","method":"connect","params":{"foo":"bar"}}') 11 assert.deepEqual(req, { 12 type: 'req', 13 id: '1', 14 method: 'connect', 15 params: { foo: 'bar' }, 16 }) 17 18 const res = parseGatewayFrame('{"type":"res","id":"1","ok":true,"payload":{"ok":true}}') 19 assert.deepEqual(res, { 20 type: 'res', 21 id: '1', 22 ok: true, 23 payload: { ok: true }, 24 error: null, 25 }) 26 27 const event = parseGatewayFrame('{"type":"event","event":"tick","payload":{"n":1}}') 28 assert.deepEqual(event, { 29 type: 'event', 30 event: 'tick', 31 payload: { n: 1 }, 32 }) 33 }) 34 35 test('gateway protocol rejects malformed frames', () => { 36 assert.equal(parseGatewayFrame('not-json'), null) 37 assert.equal(parseGatewayFrame('{"type":"event"}'), null) 38 assert.equal(parseGatewayFrame('{"type":"req","id":"1"}'), null) 39 assert.equal(parseGatewayFrame({ nope: true }), null) 40 }) 41 42 test('gateway request helper and serializer produce valid frame', () => { 43 const frame = createGatewayRequestFrame('abc', 'chat.send', { message: 'hello' }) 44 assert.deepEqual(frame, { 45 type: 'req', 46 id: 'abc', 47 method: 'chat.send', 48 params: { message: 'hello' }, 49 }) 50 51 const encoded = serializeGatewayFrame(frame) 52 const decoded = parseGatewayFrame(encoded) 53 assert.deepEqual(decoded, frame) 54 })