ai-chatbot/tests/routes/agent-main-ai-template-entry.test.ts

64 lines
2.8 KiB
TypeScript

import { readFileSync } from "node:fs";
import { resolve } from "node:path";
import { expect, test } from "@playwright/test";
import { appendAgentProjectResultForSave } from "@/lib/agents/agent-project-save-merge";
import { createEmptyAgentGenerationProjectPersistedState } from "@/lib/agents/generation-project-state";
function readSource(path: string) {
return readFileSync(resolve(process.cwd(), path), "utf8");
}
test.describe("agent main-image AI template entry", () => {
test("keeps the main result-card action and queued generation flow wired", () => {
const workspace = readSource("components/agents/AgentGenerationWorkspaceDarkV2.tsx");
const dialog = readSource("components/agents/AgentAiTemplateDialog.tsx");
const route = readSource("app/api/canvas/layout-replace/route.ts");
const queue = readSource("lib/canvas/image-task-queue.ts");
expect(workspace).toContain(
'const isSceneResultCard = activeResultModeType === "scene_generation"'
);
expect(workspace).toContain('aria-label="AI套模版"');
expect(workspace).toContain("setAiTemplateDialogSourceUrl(card.url!)");
expect(workspace).toContain("<AgentAiTemplateDialog");
expect(workspace).toContain(
'appendResultUrlToCollection("scene_generation", result.imageUrl'
);
expect(dialog).toContain("imageGenerationService.layoutReplace({");
expect(dialog).toContain("agentProjectId: projectId");
expect(dialog).toContain('referenceLabel: "风格化主图 AI 套模版参考图"');
expect(dialog).toContain('operation: "agent-main-ai-template"');
expect(dialog).toContain("pollAiTemplateTask(taskId)");
expect(dialog).toContain("await onResultCreatedRef.current({");
expect(dialog).toContain("max-h-[calc(100dvh-1rem)]");
expect(route).toContain("createCanvasImageTask({");
expect(route).toContain("await enqueueCanvasImageTask(task.id)");
expect(queue).toContain("persistAgentProjectGeneratedResult({");
expect(queue).toContain('modeType: "scene_generation"');
});
test("appends a completed AI template result without dropping existing project results", () => {
const state = createEmptyAgentGenerationProjectPersistedState();
state.resultCollections = {
scene_generation: ["https://example.com/original.png"],
detail_generation: ["https://example.com/detail.png"],
};
const nextState = appendAgentProjectResultForSave({
existingState: state,
modeType: "scene_generation",
imageUrl: "https://example.com/ai-template.png",
});
expect(nextState.resultCollections?.scene_generation).toEqual([
"https://example.com/original.png",
"https://example.com/ai-template.png",
]);
expect(nextState.resultCollections?.detail_generation).toEqual([
"https://example.com/detail.png",
]);
});
});