|
|
@@ -1,70 +0,0 @@
|
|
|
-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()
|
|
|
- }
|
|
|
- })
|
|
|
-})
|