import test from 'node:test'; import assert from 'node:assert/strict'; import { dispatch } from '../channel/webui/index.mjs'; test('C2-10c webui permits exactly the three added room verbs and preserves core refusals', async () => { for (const verb of ['room.open', 'room.read', 'room.send']) { const calls = [], args = { project: 'p', body: 'typed @name' }; let receipt; await assert.doesNotReject(async () => { receipt = await dispatch({ verb, args }, { call: async (...a) => { calls.push(a); return { ok: verb }; } }); }); assert.deepEqual(receipt, { ok: verb }); assert.deepEqual(calls, [[verb, args]]); const refused = Object.assign(new Error('refused'), { code: 'unknown-addressee' }); await assert.rejects(dispatch({ verb, args }, { call: async () => { throw refused; } }), e => e === refused); } for (const verb of ['room.delete', 'room.members', 'message.send', 'role.claim', 'shell.exec']) { let called = false; await assert.rejects(dispatch({ verb, args: {} }, { call: async () => { called = true; } }), { code: 'channel-operation' }); assert.equal(called, false); } });