| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 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('<svg width="500" height="600"><rect x="110" y="80" width="280" height="440" rx="55" fill="#68794e"/><rect x="205" y="410" width="90" height="55" fill="#151515"/></svg>') }])
- .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 });
- }
- });
|