mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-30 22:03:58 +00:00
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import { afterEach, describe, expect, test } from "bun:test"
|
|
import { Log } from "../../src/util/log"
|
|
import { WorkspaceServer } from "../../src/control-plane/workspace-server/server"
|
|
import { parseSSE } from "../../src/control-plane/sse"
|
|
import { GlobalBus } from "../../src/bus/global"
|
|
import { resetDatabase } from "../fixture/db"
|
|
import { tmpdir } from "../fixture/fixture"
|
|
|
|
afterEach(async () => {
|
|
await resetDatabase()
|
|
})
|
|
|
|
Log.init({ print: false })
|
|
|
|
describe("control-plane/workspace-server SSE", () => {
|
|
test("streams GlobalBus events and parseSSE reads them", async () => {
|
|
await using tmp = await tmpdir({ git: true })
|
|
const app = WorkspaceServer.App()
|
|
const stop = new AbortController()
|
|
const seen: unknown[] = []
|
|
try {
|
|
const response = await app.request("/event", {
|
|
signal: stop.signal,
|
|
headers: {
|
|
"x-opencode-workspace": "wrk_test_workspace",
|
|
"x-opencode-directory": tmp.path,
|
|
},
|
|
})
|
|
|
|
expect(response.status).toBe(200)
|
|
expect(response.body).toBeDefined()
|
|
|
|
const done = new Promise<void>((resolve, reject) => {
|
|
const timeout = setTimeout(() => {
|
|
reject(new Error("timed out waiting for workspace.test event"))
|
|
}, 3000)
|
|
|
|
void parseSSE(response.body!, stop.signal, (event) => {
|
|
seen.push(event)
|
|
const next = event as { type?: string }
|
|
if (next.type === "server.connected") {
|
|
GlobalBus.emit("event", {
|
|
payload: {
|
|
type: "workspace.test",
|
|
properties: { ok: true },
|
|
},
|
|
})
|
|
return
|
|
}
|
|
if (next.type !== "workspace.test") return
|
|
clearTimeout(timeout)
|
|
resolve()
|
|
}).catch((error) => {
|
|
clearTimeout(timeout)
|
|
reject(error)
|
|
})
|
|
})
|
|
|
|
await done
|
|
|
|
expect(seen.some((event) => (event as { type?: string }).type === "server.connected")).toBe(true)
|
|
expect(seen).toContainEqual({
|
|
type: "workspace.test",
|
|
properties: { ok: true },
|
|
})
|
|
} finally {
|
|
stop.abort()
|
|
}
|
|
})
|
|
})
|