t3-code-android-nightly/.repos/effect-smol/packages/tools/ai-codegen/test/Generator.test.ts
Julius Marminge e3c85ead63
chore(refs): sync Effect and Alchemy references to rc.115 and beta.78 (#12327)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-09-17 23:21:25 -07:00

68 lines
2.3 KiB
TypeScript

import * as Config from "@effect/ai-codegen/Config"
import type { DiscoveredProvider } from "@effect/ai-codegen/Discovery"
import * as Generator from "@effect/ai-codegen/Generator"
import * as OpenApiGenerator from "@effect/openapi-generator/OpenApiGenerator"
import * as NodeServices from "@effect/platform-node/NodeServices"
import { assert, describe, it } from "@effect/vitest"
import * as Effect from "effect/Effect"
import * as Layer from "effect/Layer"
import * as Path from "effect/Path"
const TestLayer = Generator.layer.pipe(
Layer.provide(Layer.succeed(OpenApiGenerator.OpenApiGenerator, {
generate: (spec) => Effect.succeed(JSON.stringify(spec))
})),
Layer.provideMerge(NodeServices.layer)
)
const provider = (patch: string): DiscoveredProvider => ({
name: "test",
packagePath: "/providers/test",
config: new Config.CodegenConfig({
spec: "spec.json",
output: "Generated.ts",
patches: [patch]
}),
specSource: Config.SpecSource.File("spec.json"),
outputPath: "Generated.ts"
})
const generateWithPatch = (patch: string) =>
Effect.gen(function*() {
const generator = yield* Generator.CodeGenerator
const output = yield* generator.generate(provider(patch), {
openapi: "3.1.0",
info: { title: "Before", version: "1.0.0" },
paths: {}
})
return JSON.parse(output)
})
describe("CodeGenerator patch inputs", () => {
it.effect("accepts inline patches with leading whitespace", () =>
Effect.gen(function*() {
const result = yield* generateWithPatch(
" \n[{\"op\":\"replace\",\"path\":\"/info/title\",\"value\":\"After\"}]"
)
assert.deepStrictEqual(result, {
openapi: "3.1.0",
info: { title: "After", version: "1.0.0" },
paths: {}
})
}).pipe(Effect.provide(TestLayer)))
it.effect("accepts absolute paths with leading whitespace", () =>
Effect.gen(function*() {
const path = yield* Path.Path
const patch = path.join(
import.meta.dirname,
"../../openapi-generator/test/fixtures/patches/valid-replace.json"
)
const result = yield* generateWithPatch(` ${patch}`)
assert.deepStrictEqual(result, {
openapi: "3.1.0",
info: { title: "Updated API Title", version: "1.0.0" },
paths: {}
})
}).pipe(Effect.provide(TestLayer)))
})