ai-chatbot/tests/routes/canvas-scale-adjust-intent.test.ts

71 lines
3.0 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { readFileSync } from "node:fs";
import { resolve } from "node:path";
function readSource(path: string) {
return readFileSync(resolve(process.cwd(), path), "utf8");
}
test.describe("canvas scale adjust product lock", () => {
test("uses one dedicated erase step and exact product overlay", () => {
const route = readSource("app/api/canvas/local-edit/route.ts");
expect(route).toContain("buildScaleAdjustProductLockAssets");
expect(route).toContain('objectRemovalMode: "premium"');
expect(route).toContain("objectRemovalMaskImageUrl: modelMaskUpload.url");
expect(route).toContain("overlayImageUrl: overlayUpload.url");
expect(route).toContain("oldFootprintMaskImageUrl: repairMaskUpload.url");
expect(route).toContain('scaleAdjustPromptStrategy: "finegrain-erase-product-lock-v1"');
expect(route).not.toContain("buildScaleAdjustVisualGuide");
expect(route).not.toContain("source-plus-guide-v1");
});
test("routes object removal through the configured fal credential", () => {
const provider = readSource("lib/ai/providers/fal-image.ts");
expect(provider).toContain(
'const FAL_OBJECT_REMOVAL_MODEL_ID = "fal-ai/finegrain-eraser/mask"'
);
expect(provider).toContain("image_url: imageUrls[0]");
expect(provider).toContain("mask_url: objectRemovalMaskImageUrl");
expect(provider).toContain('objectRemovalMode || ""');
});
test("retries old-footprint failures against the first cleaned result", () => {
const route = readSource("app/api/canvas/local-edit/route.ts");
const generator = readSource("lib/canvas/generate-image.ts");
expect(route).toContain("rejectOldFootprintOnly: true");
expect(route).toContain("scaleAdjustSequentialCleanupRetry: true");
expect(route).toContain('label: "finegrain-cleanup-pass"');
expect(generator).toContain(
'scaleAdjustRejection?.reason === "old-footprint-remnant-detected"'
);
expect(generator).toContain("referenceImages: [sequentialCleanupReferenceUrl]");
});
test("keeps transparent product images on a deterministic empty plate", () => {
const productLock = readSource("lib/canvas/scale-adjust-product-lock.ts");
expect(productLock).toContain("hasTransparentBackground");
expect(productLock).toContain("sharp(transparentCanvas)");
expect(productLock).toContain("backgroundPlateBuffer");
});
test("keeps non-pro detail result scale adjust on the shared backend flow", () => {
const source = readSource(
"components/agents/AgentGenerationWorkspaceDarkV2.tsx"
);
expect(source).toContain(
"const resolvedLocalEditModelId = isScaleAdjust\n ? undefined"
);
expect(source).toContain(
'operation: isScaleAdjust ? "scale-adjust" : undefined'
);
expect(source).toContain("targetRect: region.targetRect");
expect(source).toContain('resultModeType: "detail_generation"');
expect(source).toContain('mode: "scale_adjust"');
});
});