64 lines
2.8 KiB
TypeScript
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",
|
|
]);
|
|
});
|
|
});
|