test(server): scope MCP HttpApi handler (#27226)

This commit is contained in:
Kit Langton
2026-05-12 23:13:05 -04:00
committed by GitHub
parent 68c4951318
commit 913ea36ae6

View File

@@ -23,13 +23,19 @@ function app() {
return Server.Default().app
}
type TestApp = ReturnType<typeof app>
type TestHandler = ReturnType<typeof ExperimentalHttpApiServer.webHandler>
const request = Effect.fnUntraced(function* (route: string, directory: string, init?: RequestInit) {
const handlerScoped = Effect.acquireRelease(
Effect.sync(() => ExperimentalHttpApiServer.webHandler()),
(handler) => Effect.promise(() => handler.dispose()).pipe(Effect.ignore),
)
const request = Effect.fnUntraced(function* (handler: TestHandler, route: string, directory: string, init?: RequestInit) {
const headers = new Headers(init?.headers)
headers.set("x-opencode-directory", directory)
return yield* Effect.promise(() =>
Promise.resolve(
ExperimentalHttpApiServer.webHandler().handler(
handler.handler(
new Request(`http://localhost${route}`, {
...init,
headers,
@@ -58,7 +64,8 @@ describe("mcp HttpApi", () => {
() =>
Effect.gen(function* () {
const tmp = yield* TestInstance
const response = yield* request(McpPaths.status, tmp.directory)
const handler = yield* handlerScoped
const response = yield* request(handler, McpPaths.status, tmp.directory)
expect(response.status).toBe(200)
expect(yield* json(response)).toEqual({ demo: { status: "disabled" } })
@@ -81,7 +88,8 @@ describe("mcp HttpApi", () => {
() =>
Effect.gen(function* () {
const tmp = yield* TestInstance
const added = yield* request(McpPaths.status, tmp.directory, {
const handler = yield* handlerScoped
const added = yield* request(handler, McpPaths.status, tmp.directory, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
@@ -96,11 +104,11 @@ describe("mcp HttpApi", () => {
expect(added.status).toBe(200)
expect(yield* json(added)).toMatchObject({ added: { status: "disabled" } })
const connected = yield* request("/mcp/demo/connect", tmp.directory, { method: "POST" })
const connected = yield* request(handler, "/mcp/demo/connect", tmp.directory, { method: "POST" })
expect(connected.status).toBe(200)
expect(yield* json(connected)).toBe(true)
const disconnected = yield* request("/mcp/demo/disconnect", tmp.directory, { method: "POST" })
const disconnected = yield* request(handler, "/mcp/demo/disconnect", tmp.directory, { method: "POST" })
expect(disconnected.status).toBe(200)
expect(yield* json(disconnected)).toBe(true)
}),
@@ -122,13 +130,14 @@ describe("mcp HttpApi", () => {
() =>
Effect.gen(function* () {
const tmp = yield* TestInstance
const start = yield* request("/mcp/demo/auth", tmp.directory, { method: "POST" })
const handler = yield* handlerScoped
const start = yield* request(handler, "/mcp/demo/auth", tmp.directory, { method: "POST" })
expect(start.status).toBe(400)
const authenticate = yield* request("/mcp/demo/auth/authenticate", tmp.directory, { method: "POST" })
const authenticate = yield* request(handler, "/mcp/demo/auth/authenticate", tmp.directory, { method: "POST" })
expect(authenticate.status).toBe(400)
const removed = yield* request("/mcp/demo/auth", tmp.directory, { method: "DELETE" })
const removed = yield* request(handler, "/mcp/demo/auth", tmp.directory, { method: "DELETE" })
expect(removed.status).toBe(200)
expect(yield* json(removed)).toEqual({ success: true })
}),