httpapi-mcp.test.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { afterEach, describe, expect, test } from "bun:test"
  2. import { Context } from "effect"
  3. import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server"
  4. import { McpPaths } from "../../src/server/routes/instance/httpapi/mcp"
  5. import { Instance } from "../../src/project/instance"
  6. import { Log } from "../../src/util"
  7. import { resetDatabase } from "../fixture/db"
  8. import { tmpdir } from "../fixture/fixture"
  9. void Log.init({ print: false })
  10. const context = Context.empty() as Context.Context<unknown>
  11. function request(route: string, directory: string) {
  12. return ExperimentalHttpApiServer.webHandler().handler(
  13. new Request(`http://localhost${route}`, {
  14. headers: {
  15. "x-opencode-directory": directory,
  16. },
  17. }),
  18. context,
  19. )
  20. }
  21. afterEach(async () => {
  22. await Instance.disposeAll()
  23. await resetDatabase()
  24. })
  25. describe("mcp HttpApi", () => {
  26. test("serves status endpoint", async () => {
  27. await using tmp = await tmpdir({
  28. config: {
  29. mcp: {
  30. demo: {
  31. type: "local",
  32. command: ["echo", "demo"],
  33. enabled: false,
  34. },
  35. },
  36. },
  37. })
  38. const response = await request(McpPaths.status, tmp.path)
  39. expect(response.status).toBe(200)
  40. expect(await response.json()).toEqual({ demo: { status: "disabled" } })
  41. })
  42. })