59 lines
2.1 KiB
TypeScript
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"])
|
|
})
|