Share HTTP API boolean query schema (#26615)

This commit is contained in:
Kit Langton
2026-05-09 21:41:15 -04:00
committed by GitHub
parent 6d130e5deb
commit 16866e1180
7 changed files with 38 additions and 25 deletions
@@ -524,7 +524,10 @@ const scenarios: Scenario[] = [
yield* ctx.worktreeRemove(ctx.state.directory)
}),
),
http.protected.get("/experimental/session", "experimental.session.list").json(200, array),
http.protected
.get("/experimental/session", "experimental.session.list")
.at((ctx) => ({ path: "/experimental/session?roots=false&archived=false", headers: ctx.headers() }))
.json(200, array),
http.protected.get("/experimental/resource", "experimental.resource.list").json(),
http.protected
.post("/sync/history", "sync.history.list")
@@ -1,5 +1,5 @@
import { afterEach, describe, expect } from "bun:test"
import { Effect } from "effect"
import { Effect, Schema } from "effect"
import { OpenApi } from "effect/unstable/httpapi"
import { Flag } from "@opencode-ai/core/flag/flag"
import { Server } from "../../src/server/server"
@@ -24,6 +24,7 @@ import {
} from "../../src/server/routes/instance/httpapi/groups/session"
import { MessagesQuery as V2MessagesQuery } from "../../src/server/routes/instance/httpapi/groups/v2/message"
import { SessionsQuery as V2SessionsQuery } from "../../src/server/routes/instance/httpapi/groups/v2/session"
import { QueryBoolean } from "../../src/server/routes/instance/httpapi/groups/query"
import { resetDatabase } from "../fixture/db"
import { disposeAllInstances, tmpdir } from "../fixture/fixture"
import { it } from "../lib/effect"
@@ -106,6 +107,23 @@ describe("httpapi query schema drift", () => {
expect(status, `route ${url} 400'd, query schema is missing routing fields`).not.toBe(400)
}
it.effect(
"boolean query schema accepts only true and false strings",
Effect.sync(() => {
const decode = Schema.decodeUnknownSync(QueryBoolean)
const encode = Schema.encodeUnknownSync(QueryBoolean)
expect(decode("true")).toBe(true)
expect(decode("false")).toBe(false)
expect(encode(true)).toBe("true")
expect(encode(false)).toBe("false")
for (const input of ["1", "yes", "True", "", true, false]) {
expect(() => decode(input)).toThrow()
}
}),
)
it.effect(
"OpenAPI workspace query params are declared by runtime query schemas",
Effect.sync(() => {