|
|
@@ -1,10 +1,11 @@
|
|
|
import { afterEach, describe, expect, mock, spyOn, test } from "bun:test"
|
|
|
-import { Effect } from "effect"
|
|
|
+import { Context, Effect } from "effect"
|
|
|
import { Flag } from "@opencode-ai/core/flag/flag"
|
|
|
import { Instance } from "../../src/project/instance"
|
|
|
import { WithInstance } from "../../src/project/with-instance"
|
|
|
import { Server } from "../../src/server/server"
|
|
|
import { SyncPaths } from "../../src/server/routes/instance/httpapi/groups/sync"
|
|
|
+import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server"
|
|
|
import { Session } from "@/session/session"
|
|
|
import * as Log from "@opencode-ai/core/util/log"
|
|
|
import { resetDatabase } from "../fixture/db"
|
|
|
@@ -14,6 +15,7 @@ void Log.init({ print: false })
|
|
|
|
|
|
const originalHttpApi = Flag.OPENCODE_EXPERIMENTAL_HTTPAPI
|
|
|
const originalWorkspaces = Flag.OPENCODE_EXPERIMENTAL_WORKSPACES
|
|
|
+const context = Context.empty() as Context.Context<unknown>
|
|
|
|
|
|
function app(httpapi = true) {
|
|
|
Flag.OPENCODE_EXPERIMENTAL_HTTPAPI = httpapi
|
|
|
@@ -128,4 +130,22 @@ describe("sync HttpApi", () => {
|
|
|
expect(httpapi.status).toBe(400)
|
|
|
}
|
|
|
})
|
|
|
+
|
|
|
+ test("returns structured validation errors", async () => {
|
|
|
+ await using tmp = await tmpdir({ git: true, config: { formatter: false, lsp: false } })
|
|
|
+ const response = await ExperimentalHttpApiServer.webHandler().handler(
|
|
|
+ new Request(`http://localhost${SyncPaths.history}`, {
|
|
|
+ method: "POST",
|
|
|
+ headers: { "x-opencode-directory": tmp.path, "content-type": "application/json" },
|
|
|
+ body: JSON.stringify({ aggregate: -1 }),
|
|
|
+ }),
|
|
|
+ context,
|
|
|
+ )
|
|
|
+
|
|
|
+ expect(response.status).toBe(400)
|
|
|
+ expect(response.headers.get("content-type") ?? "").toContain("application/json")
|
|
|
+ const body = (await response.json()) as Record<string, unknown>
|
|
|
+ expect(body.success).toBe(false)
|
|
|
+ expect(Array.isArray(body.error) || Array.isArray(body.errors)).toBe(true)
|
|
|
+ })
|
|
|
})
|