diff --git a/package.json b/package.json index d08bada05203..5ea11adf0f52 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "typecheck": "bun turbo typecheck", "postinstall": "bun run --cwd packages/opencode fix-node-pty", "prepare": "husky", + "generate:check": "bun ./script/check-generate.ts", "random": "echo 'Random script'", "hello": "echo 'Hello World!'", "test": "echo 'do not run tests from root' && exit 1" diff --git a/packages/opencode/test/server/question-openapi.test.ts b/packages/opencode/test/server/question-openapi.test.ts new file mode 100644 index 000000000000..30d921fe4169 --- /dev/null +++ b/packages/opencode/test/server/question-openapi.test.ts @@ -0,0 +1,30 @@ +import { describe, expect, test } from "bun:test" +import { Server } from "../../src/server/server" + +describe("question openapi", () => { + test("keeps the public reply body inline", async () => { + const spec = await Server.openapi() + const body = spec.paths["/question/{requestID}/reply"]?.post?.requestBody + + expect(body).toBeDefined() + if (!body || "$ref" in body) throw new Error("expected inline request body") + + const media = body.content["application/json"] + expect(media).toBeDefined() + if (!media || "$ref" in media) throw new Error("expected inline json media type") + + expect(media.schema).toMatchObject({ + type: "object", + required: ["answers"], + properties: { + answers: { + description: "User answers in order of questions (each answer is an array of selected labels)", + type: "array", + items: { + $ref: "#/components/schemas/QuestionAnswer", + }, + }, + }, + }) + }) +}) diff --git a/script/check-generate.ts b/script/check-generate.ts new file mode 100644 index 000000000000..57fae14485a6 --- /dev/null +++ b/script/check-generate.ts @@ -0,0 +1,6 @@ +#!/usr/bin/env bun + +import { $ } from "bun" + +await $`bun ./script/generate.ts` +await $`git diff --exit-code -- packages/sdk/openapi.json packages/sdk/js/src/gen packages/sdk/js/src/v2`