opencode/packages/voice/test/notification-router.test.ts
2026-07-28 21:00:35 -04:00

59 lines
2.1 KiB
TypeScript

import { expect, test } from "bun:test"
import { createNotificationRouter, type RoutedAnnouncement } from "../src/notification-router"
test("routes blockers and completions through the admitted delegation", () => {
const routed: RoutedAnnouncement[] = []
const router = createNotificationRouter((announcement) => routed.push(announcement))
router.beginDelegatedTool()
router.route({
notification: {
type: "opencode.prompt.blocked",
prompt_id: "prompt-1",
blocker: "permission",
session_id: "session-1",
request_id: "permission-1",
action: "read",
resources: [],
},
})
expect(routed).toEqual([])
router.finishDelegatedTool("delegation-1", { sessionID: "session-1", promptID: "prompt-1" })
router.route({
notification: {
type: "opencode.prompt.completed",
session_id: "session-1",
prompt_id: "prompt-1",
status: "completed",
text: "done",
},
receipt: { sessionID: "session-1", promptID: "prompt-1" },
})
expect(routed.map((item) => item.delegationID)).toEqual(["delegation-1", "delegation-1"])
expect(routed[0].announcement.receipt).toBeUndefined()
expect(routed[1].announcement.receipt).toEqual({ sessionID: "session-1", promptID: "prompt-1" })
})
test("keeps identical prompt IDs isolated by session", () => {
const routed: RoutedAnnouncement[] = []
const router = createNotificationRouter((announcement) => routed.push(announcement))
router.beginDelegatedTool()
router.finishDelegatedTool("delegation-1", { sessionID: "session-1", promptID: "prompt-shared" })
router.beginDelegatedTool()
router.finishDelegatedTool("delegation-2", { sessionID: "session-2", promptID: "prompt-shared" })
for (const sessionID of ["session-1", "session-2"])
router.route({
notification: {
type: "opencode.prompt.completed",
session_id: sessionID,
prompt_id: "prompt-shared",
status: "completed",
text: "done",
},
receipt: { sessionID, promptID: "prompt-shared" },
})
expect(routed.map((item) => item.delegationID)).toEqual(["delegation-1", "delegation-2"])
})