* perf(protocol): generate inbound ws validators * perf(client): use generated ws validation * docs(protocol): document generated validation * fix(protocol): make validator generation source-only * test(protocol): cover explicit provider model normalization * fix(protocol): preserve inbound compat defaults * fix(protocol): make validator import rewrite portable * fix(protocol): harden validation safety checks * fix(protocol): guard generated validator boundaries * fix(protocol): normalize legacy inbound defaults * fix(protocol): simplify generated validation safety net * fix(protocol): keep cold typecheck source-only * fix(protocol): encapsulate validator codegen * fix(protocol): bootstrap source-alias typechecks * fix(app): keep source aliases out of bundler config * fix(protocol): harden validator codegen packaging * fix(protocol): own zod-aot patches in generator * fix(protocol): trim validator safety net * fix(client): normalize provider updates before dispatch * fix(protocol): keep validator generation out of install
85 lines
2.2 KiB
TypeScript
85 lines
2.2 KiB
TypeScript
import { describe, expect, test } from "vitest";
|
|
import {
|
|
GetProvidersSnapshotResponseMessageSchema,
|
|
ProviderSnapshotEntrySchema,
|
|
ProvidersSnapshotUpdateMessageSchema,
|
|
} from "./messages.js";
|
|
|
|
describe("provider snapshot message schemas", () => {
|
|
test("defaults missing provider snapshot entry enabled state to true", () => {
|
|
const parsed = ProviderSnapshotEntrySchema.parse({
|
|
provider: "codex",
|
|
status: "ready",
|
|
label: "Codex",
|
|
});
|
|
|
|
expect(parsed.enabled).toBe(true);
|
|
});
|
|
|
|
test("preserves disabled provider snapshot entries", () => {
|
|
const parsed = ProviderSnapshotEntrySchema.parse({
|
|
provider: "claude",
|
|
status: "unavailable",
|
|
enabled: false,
|
|
label: "Claude",
|
|
});
|
|
|
|
expect(parsed.enabled).toBe(false);
|
|
});
|
|
|
|
test("preserves enabled provider snapshot entries", () => {
|
|
const parsed = ProviderSnapshotEntrySchema.parse({
|
|
provider: "opencode",
|
|
status: "loading",
|
|
enabled: true,
|
|
label: "OpenCode",
|
|
});
|
|
|
|
expect(parsed.enabled).toBe(true);
|
|
});
|
|
|
|
test("defaults missing enabled state in providers snapshot response entries", () => {
|
|
const parsed = GetProvidersSnapshotResponseMessageSchema.parse({
|
|
type: "get_providers_snapshot_response",
|
|
payload: {
|
|
entries: [
|
|
{
|
|
provider: "codex",
|
|
status: "ready",
|
|
label: "Codex",
|
|
},
|
|
{
|
|
provider: "claude",
|
|
status: "unavailable",
|
|
enabled: false,
|
|
label: "Claude",
|
|
},
|
|
],
|
|
generatedAt: "2026-04-24T00:00:00.000Z",
|
|
requestId: "req-providers",
|
|
},
|
|
});
|
|
|
|
expect(parsed.payload.entries.map((entry) => entry.enabled)).toEqual([true, false]);
|
|
});
|
|
|
|
test("defaults missing enabled state in providers snapshot update entries", () => {
|
|
const parsed = ProvidersSnapshotUpdateMessageSchema.parse({
|
|
type: "providers_snapshot_update",
|
|
payload: {
|
|
cwd: "/tmp/repo",
|
|
entries: [
|
|
{
|
|
provider: "codex",
|
|
status: "ready",
|
|
label: "Codex",
|
|
},
|
|
],
|
|
generatedAt: "2026-04-24T00:00:00.000Z",
|
|
},
|
|
});
|
|
|
|
expect(parsed.payload.entries[0]?.enabled).toBe(true);
|
|
});
|
|
});
|