11import { afterEach , describe , expect , mock , spyOn , test } from "bun:test"
2- import { Effect } from "effect"
2+ import { Context , Effect } from "effect"
33import { Flag } from "@opencode-ai/core/flag/flag"
44import { Instance } from "../../src/project/instance"
55import { WithInstance } from "../../src/project/with-instance"
66import { Server } from "../../src/server/server"
77import { SyncPaths } from "../../src/server/routes/instance/httpapi/groups/sync"
8+ import { ExperimentalHttpApiServer } from "../../src/server/routes/instance/httpapi/server"
89import { Session } from "@/session/session"
910import * as Log from "@opencode-ai/core/util/log"
1011import { resetDatabase } from "../fixture/db"
@@ -14,6 +15,7 @@ void Log.init({ print: false })
1415
1516const originalHttpApi = Flag . OPENCODE_EXPERIMENTAL_HTTPAPI
1617const originalWorkspaces = Flag . OPENCODE_EXPERIMENTAL_WORKSPACES
18+ const context = Context . empty ( ) as Context . Context < unknown >
1719
1820function app ( httpapi = true ) {
1921 Flag . OPENCODE_EXPERIMENTAL_HTTPAPI = httpapi
@@ -128,4 +130,22 @@ describe("sync HttpApi", () => {
128130 expect ( httpapi . status ) . toBe ( 400 )
129131 }
130132 } )
133+
134+ test ( "returns structured validation errors" , async ( ) => {
135+ await using tmp = await tmpdir ( { git : true , config : { formatter : false , lsp : false } } )
136+ const response = await ExperimentalHttpApiServer . webHandler ( ) . handler (
137+ new Request ( `http://localhost${ SyncPaths . history } ` , {
138+ method : "POST" ,
139+ headers : { "x-opencode-directory" : tmp . path , "content-type" : "application/json" } ,
140+ body : JSON . stringify ( { aggregate : - 1 } ) ,
141+ } ) ,
142+ context ,
143+ )
144+
145+ expect ( response . status ) . toBe ( 400 )
146+ expect ( response . headers . get ( "content-type" ) ?? "" ) . toContain ( "application/json" )
147+ const body = ( await response . json ( ) ) as Record < string , unknown >
148+ expect ( body . success ) . toBe ( false )
149+ expect ( Array . isArray ( body . error ) || Array . isArray ( body . errors ) ) . toBe ( true )
150+ } )
131151} )
0 commit comments