Files
2026-07-13 12:58:18 +08:00

91 lines
2.8 KiB
TypeScript

import { describe, it, expect, vi } from "vitest";
import {
generateA2uiImpl,
buildA2uiOperationsFromToolCall,
RENDER_A2UI_TOOL_SCHEMA,
CUSTOM_CATALOG_ID,
} from "../generate-a2ui";
describe("generateA2uiImpl", () => {
it("returns system prompt from context entries", () => {
const result = generateA2uiImpl({
messages: [],
contextEntries: [
{ value: "Component catalog info" },
{ value: "More context" },
],
});
expect(result.systemPrompt).toContain("Component catalog info");
expect(result.systemPrompt).toContain("More context");
});
it("filters empty/missing context values", () => {
const result = generateA2uiImpl({
messages: [],
contextEntries: [{ value: "" }, { noValue: true }, { value: "keep" }],
});
expect(result.systemPrompt).toBe("keep");
});
it("returns tool schema and choice", () => {
const result = generateA2uiImpl({ messages: [] });
expect(result.toolSchema.name).toBe("render_a2ui");
expect(result.toolChoice).toBe("render_a2ui");
});
it("passes messages through", () => {
const msgs = [{ role: "user", content: "hello" }];
const result = generateA2uiImpl({ messages: msgs });
expect(result.messages).toBe(msgs);
});
it("returns the default catalog ID", () => {
const result = generateA2uiImpl({ messages: [] });
expect(result.catalogId).toBe(CUSTOM_CATALOG_ID);
});
});
describe("buildA2uiOperationsFromToolCall", () => {
it("builds create_surface + update_components", () => {
const result = buildA2uiOperationsFromToolCall({
surfaceId: "s1",
catalogId: "cat1",
components: [{ id: "root", component: "Title" }],
});
expect(result.a2ui_operations).toHaveLength(2);
expect(result.a2ui_operations[0].type).toBe("create_surface");
expect(result.a2ui_operations[1].type).toBe("update_components");
});
it("includes update_data_model when data provided", () => {
const result = buildA2uiOperationsFromToolCall({
surfaceId: "s1",
catalogId: "cat1",
components: [{ id: "root" }],
data: { key: "value" },
});
expect(result.a2ui_operations).toHaveLength(3);
expect(result.a2ui_operations[2].type).toBe("update_data_model");
});
it("defaults surfaceId and catalogId", () => {
const result = buildA2uiOperationsFromToolCall({ components: [] });
expect(result.a2ui_operations[0].surfaceId).toBe("dynamic-surface");
expect(result.a2ui_operations[0].catalogId).toBe(CUSTOM_CATALOG_ID);
});
it("warns on empty components", () => {
const spy = vi.spyOn(console, "warn").mockImplementation(() => {});
buildA2uiOperationsFromToolCall({
surfaceId: "s1",
catalogId: "c1",
components: [],
});
expect(spy).toHaveBeenCalledWith(
expect.stringContaining("empty components"),
"s1",
);
spy.mockRestore();
});
});