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(" { 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", ]); }); });