48 lines
1.7 KiB
TypeScript
48 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { emptyAiProviderForm } from "../contracts/aiProviders";
|
|
import { aiProviderCreateRequestFromForm, aiProviderUpdateRequestFromForm } from "./aiProviders";
|
|
|
|
describe("ai provider form schemas", () => {
|
|
it("generates provider IDs and defaults for normal OpenAI setup", () => {
|
|
const request = aiProviderCreateRequestFromForm({ ...emptyAiProviderForm(), id: "", apiKeyRef: "secret://providers/openai" });
|
|
|
|
expect(request).toMatchObject({
|
|
id: "ai.openai",
|
|
name: "OpenAI",
|
|
kind: "openai",
|
|
baseUrl: "https://api.openai.com/v1",
|
|
apiKeyRef: "secret://providers/openai",
|
|
defaultModel: "gpt-5.6-terra",
|
|
relayMode: "relay"
|
|
});
|
|
expect(request.models).toContain("gpt-5.6-terra");
|
|
});
|
|
|
|
it("keeps Ollama local mode keyless while still providing required metadata", () => {
|
|
const request = aiProviderUpdateRequestFromForm({ ...emptyAiProviderForm(), kind: "ollama", name: "", baseUrl: "", apiKeyRef: "", modelsText: "", defaultModel: "", relayMode: "local" });
|
|
|
|
expect(request).toMatchObject({
|
|
name: "Ollama Local",
|
|
kind: "ollama",
|
|
baseUrl: "http://127.0.0.1:11434/v1",
|
|
apiKeyRef: "",
|
|
defaultModel: "gpt-oss:20b",
|
|
relayMode: "local"
|
|
});
|
|
expect(request.models).toEqual(["gpt-oss:20b"]);
|
|
});
|
|
|
|
it("keeps an existing configured secret opaque during edits", () => {
|
|
const request = aiProviderUpdateRequestFromForm({
|
|
...emptyAiProviderForm(),
|
|
id: "ai.openai",
|
|
apiKeyRef: "",
|
|
apiKeyConfigured: true
|
|
});
|
|
|
|
expect(request.apiKeyRef).toBe("");
|
|
expect(JSON.stringify(request)).not.toContain("secret://providers/openai");
|
|
});
|
|
});
|