Files
oh-my-opencode/src/hooks/background-notification/hook.test.ts
T

61 lines
1.8 KiB
TypeScript

import { describe, expect, test, mock } from "bun:test"
import { createBackgroundNotificationHook } from "./hook"
describe("createBackgroundNotificationHook", () => {
test("#given unsupported event type #when event handler runs #then it does not forward to manager", async () => {
//#given
const handleEvent = mock(() => {})
const hook = createBackgroundNotificationHook({
handleEvent,
injectPendingNotificationsIntoChatMessage: () => {},
} as never)
//#when
await hook.event({ event: { type: "message.removed", properties: { sessionID: "ses-1" } } })
//#then
expect(handleEvent).not.toHaveBeenCalled()
})
test("#given supported event type #when event handler runs #then it forwards to manager", async () => {
//#given
const handleEvent = mock(() => {})
const hook = createBackgroundNotificationHook({
handleEvent,
injectPendingNotificationsIntoChatMessage: () => {},
} as never)
const event = { type: "message.part.delta", properties: { sessionID: "ses-1", field: "text", delta: "x" } }
//#when
await hook.event({ event })
//#then
expect(handleEvent).toHaveBeenCalledWith(event)
})
test("#given todo.updated event #when event handler runs #then it forwards to manager", async () => {
//#given
const handleEvent = mock(() => {})
const hook = createBackgroundNotificationHook({
handleEvent,
injectPendingNotificationsIntoChatMessage: () => {},
} as never)
const event = {
type: "todo.updated",
properties: {
sessionID: "ses-1",
todos: [{ id: "todo-1", content: "done", status: "completed", priority: "high" }],
},
}
//#when
await hook.event({ event })
//#then
expect(handleEvent).toHaveBeenCalledWith(event)
})
})