Files
workinf_Blender_Wasm/web/tests/e2e/network-interruption.spec.ts
mes123456 f68c6c9678
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled
Add full source parity validation workflow
2026-09-07 16:45:07 +08:00

35 lines
1.5 KiB
TypeScript

import { expect, test } from "@playwright/test";
import fs from "node:fs";
import path from "node:path";
const basicBlend = path.resolve(import.meta.dirname, "../../../tests/files/web/basic_scene.blend");
test("keeps Main edit and save-reopen available during a Chromium network interruption", async ({ context, page }) => {
await page.goto("/");
await expect(page.getByTestId("engine-status")).toContainText("Engine: ready", { timeout: 20_000 });
await page.setInputFiles("[data-testid=blend-file-input]", basicBlend);
await expect(page.getByTestId("scene-stats")).toContainText("Objects 3");
await context.setOffline(true);
try {
await page.getByRole("button", { name: "添加立方体" }).click();
await expect(page.getByTestId("engine-status")).toContainText("SceneIR r2 (4 objects)");
const downloadPromise = page.waitForEvent("download");
await page.getByRole("button", { name: "保存项目" }).click();
const download = await downloadPromise;
expect(download.suggestedFilename()).toBe("blender-web.blend");
const savedPath = await download.path();
expect(savedPath).not.toBeNull();
await page.setInputFiles("[data-testid=blend-file-input]", {
name: "network-reopen.blend",
mimeType: "application/octet-stream",
buffer: fs.readFileSync(savedPath!),
});
await expect(page.getByTestId("engine-status")).toContainText("SceneIR r1 (4 objects)");
await expect(page.getByTestId("scene-stats")).toContainText("Objects 4");
}
finally {
await context.setOffline(false);
}
});