import test from "node:test"; import assert from "node:assert/strict"; import { access, mkdtemp, readFile, rm } from "node:fs/promises"; import { join } from "node:path"; import { tmpdir } from "node:os"; import sharp from "sharp"; import { runDesignedAsset } from "./designed-asset-runner.mjs"; test("runner creates three deterministic designed pages without a paid call", async () => { const root = await mkdtemp(join(tmpdir(), "fmode-designed-")); try { const reference = join(root, "reference.png"); await sharp({ create: { width: 500, height: 600, channels: 3, background: "#f4f2ed" } }) .composite([{ input: Buffer.from('') }]) .png().toFile(reference); const result = await runDesignedAsset({ reference, outputDirectory: join(root, "out"), productUnderstanding: { category: "通用商品", product_name: { value: "TEST PRODUCT" }, visible_selling_points: [ { value: "绿色主体轮廓", basis_refs: ["visible_fact:1"] }, { value: "正面黑色标记", basis_refs: ["visible_fact:2"] }, ], verified_visible_facts: ["商品具有绿色主体轮廓", "商品正面可见黑色标记"], }, externalCalls: { vision_understanding: 1, fact_audit: 1, asset_upload: 1 }, }); assert.equal(result.status, "complete"); assert.equal(result.paid_external_calls, 0); assert.equal(result.files.length, 3); assert.ok(result.files.every((file) => file.width === 1200 && file.height === 1200)); assert.equal(result.page_spec.copy.heroTitle, "TEST PRODUCT"); assert.equal(result.design_ir.schema_version, "1.1"); assert.ok(result.design_ir.layout_plan.recipe_set.style); assert.equal(result.external_calls.vision_understanding, 1); assert.equal(result.external_calls.paid_image_generation, 0); assert.ok(result.product_layer.edgeCleanup); assert.equal(result.control_plane.release_status, "review_required"); assert.equal(result.control_plane.quality_status, "review_required"); assert.deepEqual(Object.keys(result.control_files).sort(), ["benchmark_result", "delivery_profile", "design_ir", "prompt_contracts", "quality_report", "repair_plan", "view_coverage"]); await Promise.all(Object.values(result.control_files).map((file) => access(file))); const benchmark = JSON.parse(await readFile(result.control_files.benchmark_result, "utf8")); assert.equal(benchmark.release_status, "review_required"); } finally { await rm(root, { recursive: true, force: true }); } });