fix(POSTV1-08): 修复文字拖动闪烁与自动保存
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:
@@ -78,7 +78,7 @@ async function routeEditor(page: Page, projectId: string, backend: Backend, opti
|
||||
await page.route("**/api/v1/assets/public/p0a-complex-v1/*", (route) => route.fulfill({ body: readFileSync(windowsFont), contentType: "font/ttf" }));
|
||||
}
|
||||
|
||||
test("TDD-WP4-EXP-001 cancel keeps a pending text edit outside history and export", async ({ page }) => {
|
||||
test("TDD-WP4-EXP-001 cancel keeps automatically saved text outside the export", async ({ page }) => {
|
||||
const projectId = "00000000-0000-4000-8000-000000000920";
|
||||
const assetId = "00000000-0000-4000-8000-000000000921";
|
||||
const backend: Backend = { canvas: canvasForRatio("3:4", assetId), latestBodies: [], saves: 0, version: 2 };
|
||||
@@ -87,27 +87,29 @@ test("TDD-WP4-EXP-001 cancel keeps a pending text edit outside history and expor
|
||||
await page.getByRole("button", { name: "文字模板", exact: true }).click();
|
||||
await page.getByRole("button", { name: /FLOWER001 春日计划/ }).click();
|
||||
await expect.poll(() => backend.saves, { timeout: 5_000 }).toBe(1);
|
||||
await page.getByLabel("文字内容").fill("尚未提交的导出文字");
|
||||
await page.getByLabel("文字内容").fill("自动保存的导出文字");
|
||||
await expect.poll(() => backend.saves, { timeout: 5_000 }).toBe(2);
|
||||
const downloads: string[] = [];
|
||||
page.on("download", (download) => downloads.push(download.suggestedFilename()));
|
||||
await page.getByRole("button", { name: "导出", exact: true }).click();
|
||||
const dialog = page.getByRole("dialog", { name: "导出成品" });
|
||||
await expect(dialog).toContainText("导出前需要提交当前修改");
|
||||
await expect(dialog.getByText("将应用当前修改并导出", { exact: true })).toBeVisible();
|
||||
await expect(dialog).not.toContainText("导出前需要提交当前修改");
|
||||
await expect(dialog.getByRole("checkbox", { name: "将应用当前修改并导出" })).toHaveCount(0);
|
||||
await dialog.getByRole("button", { name: "取消" }).click();
|
||||
await expect(dialog).toHaveCount(0);
|
||||
await expect(page.getByLabel("文字内容")).toHaveValue("尚未提交的导出文字");
|
||||
expect(backend.saves).toBe(1);
|
||||
await expect(page.getByLabel("文字内容")).toHaveValue("自动保存的导出文字");
|
||||
expect(backend.saves).toBe(2);
|
||||
expect(backend.canvas.elements[0]?.content).toBe("自动保存的导出文字");
|
||||
expect(backend.latestBodies).toHaveLength(0);
|
||||
expect(downloads).toHaveLength(0);
|
||||
const beforeUndo = { download_count: 0, latest_count: 0, save_count_after_cancel: backend.saves, state_version: backend.version };
|
||||
await page.getByRole("button", { name: "撤销" }).click();
|
||||
await expect(page.getByLabel("文字内容")).toHaveCount(0);
|
||||
await expect(page.getByLabel("文字内容")).toHaveValue("春日计划");
|
||||
evidence("TDD-WP4-EXP-001-cancel-pending-edit", "network-timeline.json", { ...beforeUndo, compose_calls: 0, export_save_calls: 0 });
|
||||
evidence("TDD-WP4-EXP-001-cancel-pending-edit", "db-diff.json", { committed_text_after_cancel: "春日计划", first_undo_removed_initial_element: true, latest_exports_changed: false });
|
||||
evidence("TDD-WP4-EXP-001-cancel-pending-edit", "db-diff.json", { committed_text_after_cancel: "自动保存的导出文字", first_undo_restored_initial_text: true, latest_exports_changed: false });
|
||||
});
|
||||
|
||||
test("TDD-WP4-EXP-001 confirm commits once, downloads, and saves the same bytes", async ({ page }) => {
|
||||
test("TDD-WP4-EXP-001 exports automatically saved text and saves the same bytes", async ({ page }) => {
|
||||
const projectId = "00000000-0000-4000-8000-000000000930";
|
||||
const assetId = "00000000-0000-4000-8000-000000000931";
|
||||
const backend: Backend = { canvas: canvasForRatio("3:4", assetId), latestBodies: [], saves: 0, version: 4 };
|
||||
@@ -117,6 +119,7 @@ test("TDD-WP4-EXP-001 confirm commits once, downloads, and saves the same bytes"
|
||||
await page.getByRole("button", { name: /FLOWER001 春日计划/ }).click();
|
||||
await expect.poll(() => backend.saves, { timeout: 5_000 }).toBe(1);
|
||||
await page.getByLabel("文字内容").fill("确认后进入导出");
|
||||
await expect.poll(() => backend.saves, { timeout: 5_000 }).toBe(2);
|
||||
await page.getByRole("button", { name: "导出", exact: true }).click();
|
||||
const dialog = page.getByRole("dialog", { name: "导出成品" });
|
||||
if (process.env.DADA_EVIDENCE_DIR_EXPORT) {
|
||||
@@ -124,14 +127,14 @@ test("TDD-WP4-EXP-001 confirm commits once, downloads, and saves the same bytes"
|
||||
mkdirSync(dirname(screenshot), { recursive: true });
|
||||
await page.screenshot({ fullPage: true, path: screenshot });
|
||||
}
|
||||
await dialog.getByRole("checkbox", { name: "将应用当前修改并导出" }).check();
|
||||
await expect(dialog.getByRole("checkbox", { name: "将应用当前修改并导出" })).toHaveCount(0);
|
||||
const downloadPromise = page.waitForEvent("download");
|
||||
await dialog.getByRole("button", { name: "导出并下载" }).click();
|
||||
const download = await downloadPromise;
|
||||
const downloadPath = await download.path();
|
||||
if (!downloadPath) throw new Error("Browser download did not expose a local path.");
|
||||
await expect(dialog.getByRole("status")).toHaveText("已下载并保存为最新成品");
|
||||
await expect.poll(() => backend.saves).toBe(2);
|
||||
expect(backend.saves).toBe(2);
|
||||
expect(backend.canvas.elements[0]?.content).toBe("确认后进入导出");
|
||||
expect(backend.latestBodies).toHaveLength(1);
|
||||
const downloaded = readFileSync(downloadPath);
|
||||
|
||||
Reference in New Issue
Block a user