fix(POSTV1-editor): 修复多选拖动与底图调整
Dada P0-A isolated Windows CI / validate-and-package (push) Waiting to run
Dada P0-A isolated Windows CI / validate-and-package (push) Waiting to run
This commit is contained in:
@@ -67,6 +67,20 @@ async function routeEditor(page: Page) {
|
||||
});
|
||||
}
|
||||
|
||||
async function canvasFingerprint(page: Page) {
|
||||
return page.getByLabel("编辑画布").evaluate((canvas: HTMLCanvasElement) => {
|
||||
const context = canvas.getContext("2d");
|
||||
if (!context) throw new Error("Canvas context unavailable.");
|
||||
return [
|
||||
...context.getImageData(108, 720, 1, 1).data,
|
||||
...context.getImageData(324, 720, 1, 1).data,
|
||||
...context.getImageData(540, 720, 1, 1).data,
|
||||
...context.getImageData(756, 720, 1, 1).data,
|
||||
...context.getImageData(972, 720, 1, 1).data,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
test("TDD-WP4-BG-001 preserves overlays while switching the background", async ({ page }) => {
|
||||
await routeEditor(page);
|
||||
const saves: Array<Record<string, unknown>> = [];
|
||||
@@ -144,3 +158,35 @@ test("TDD-WP4-BG-002 commits, reopens, undoes, and resets background processing"
|
||||
writeEvidence("TDD-WP4-BG-002-processing-controls", "pixel-diff.json", { preview_commit_undo_reset: true, export_source_canvas_state_stable: true });
|
||||
await page.screenshot({ fullPage: true, path: process.env.DADA_EVIDENCE_DIR_EDITOR ? resolve(process.env.DADA_EVIDENCE_DIR_EDITOR, "TDD-WP4-BG-002-processing-controls", "processing-controls.png") : undefined });
|
||||
});
|
||||
|
||||
test("TDD-WP4-BG-002 previews background pixels before committing", async ({ page }) => {
|
||||
await routeEditor(page);
|
||||
const saves: Array<Record<string, unknown>> = [];
|
||||
let version = 7;
|
||||
await page.route(`**/api/v1/projects/${projectId}/state`, async (route) => {
|
||||
saves.push(route.request().postDataJSON() as Record<string, unknown>);
|
||||
version += 1;
|
||||
await route.fulfill({ body: JSON.stringify({ save_status: "saved", state_version: version }), contentType: "application/json", status: 200 });
|
||||
});
|
||||
await page.goto(`${webUrl}/app/projects/${projectId}/editor`);
|
||||
await page.getByRole("button", { name: "恢复原图" }).click();
|
||||
await page.getByRole("button", { name: "应用调整" }).click();
|
||||
await expect.poll(() => saves.length, { timeout: 4_000 }).toBeGreaterThan(0);
|
||||
await expect.poll(async () => (await canvasFingerprint(page)).some((channel) => channel < 240)).toBe(true);
|
||||
const baseline = (await canvasFingerprint(page)).join(",");
|
||||
|
||||
const ranges = page.locator(".editor-inspector input[type=range]");
|
||||
await ranges.nth(0).fill("40");
|
||||
await ranges.nth(1).fill("25");
|
||||
await ranges.nth(2).fill("-35");
|
||||
await ranges.nth(3).fill("70");
|
||||
await ranges.nth(4).fill("100");
|
||||
await expect.poll(async () => (await canvasFingerprint(page)).join(",")).not.toBe(baseline);
|
||||
|
||||
await page.getByRole("button", { name: "应用调整" }).click();
|
||||
await expect.poll(() => saves.length, { timeout: 4_000 }).toBeGreaterThan(1);
|
||||
const committed = saves.at(-1) as { canvas_state: typeof initialCanvasState };
|
||||
expect(committed.canvas_state.background.adjustments).toMatchObject({
|
||||
brightness: 40, contrast: 25, saturation: -35, sharpness: 100, temperature: 70,
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user