mirror of
https://github.com/penpot/penpot.git
synced 2025-06-17 20:21:37 +02:00
🔧 Set up playwright project for render wasm
This commit is contained in:
parent
8c337f508b
commit
59a4b51d2c
10 changed files with 2256 additions and 8 deletions
1
frontend/.gitignore
vendored
1
frontend/.gitignore
vendored
|
@ -11,3 +11,4 @@ node_modules/
|
||||||
/blob-report/
|
/blob-report/
|
||||||
/playwright/.cache/
|
/playwright/.cache/
|
||||||
/playwright/**/visual-specs/**/*.png
|
/playwright/**/visual-specs/**/*.png
|
||||||
|
/playwright/**/render-wasm-specs/**/*.png
|
||||||
|
|
|
@ -53,6 +53,18 @@ export default defineConfig({
|
||||||
toHaveScreenshot: { maxDiffPixelRatio: 0.005 },
|
toHaveScreenshot: { maxDiffPixelRatio: 0.005 },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "render-wasm",
|
||||||
|
use: {
|
||||||
|
...devices["Desktop Chrome"],
|
||||||
|
viewport: { width: 1920, height: 1080 }, // Add custom viewport size
|
||||||
|
deviceScaleFactor: 2,
|
||||||
|
},
|
||||||
|
testDir: "./playwright/ui/render-wasm-specs",
|
||||||
|
expect: {
|
||||||
|
toHaveScreenshot: { maxDiffPixelRatio: 0.005 },
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
/* Run your local dev server before starting the tests */
|
/* Run your local dev server before starting the tests */
|
||||||
|
|
1047
frontend/playwright/data/render-wasm/get-file-shapes-fills.json
Normal file
1047
frontend/playwright/data/render-wasm/get-file-shapes-fills.json
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
BIN
frontend/playwright/data/render-wasm/penguins.jpg
Normal file
BIN
frontend/playwright/data/render-wasm/penguins.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 964 KiB |
|
@ -23,6 +23,29 @@ export class BasePage {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async mockAsset(page, assetId, assetFilename, options) {
|
||||||
|
const url = `**/assets/by-file-media-id/${assetId}`;
|
||||||
|
|
||||||
|
return page.route(url, (route) =>
|
||||||
|
route.fulfill({
|
||||||
|
path: `playwright/data/${assetFilename}`,
|
||||||
|
status: 200,
|
||||||
|
...options,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async mockConfigFlags(page, flags) {
|
||||||
|
const url = "**/js/config.js?ts=*";
|
||||||
|
return await page.route(url, (route) =>
|
||||||
|
route.fulfill({
|
||||||
|
status: 200,
|
||||||
|
contentType: "application/javascript",
|
||||||
|
body: `var penpotFlags = "${flags.join(" ")}";`,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#page = null;
|
#page = null;
|
||||||
|
|
||||||
constructor(page) {
|
constructor(page) {
|
||||||
|
@ -38,14 +61,11 @@ export class BasePage {
|
||||||
}
|
}
|
||||||
|
|
||||||
async mockConfigFlags(flags) {
|
async mockConfigFlags(flags) {
|
||||||
const url = "**/js/config.js?ts=*";
|
return BasePage.mockConfigFlags(this.page, flags);
|
||||||
return await this.page.route(url, (route) =>
|
}
|
||||||
route.fulfill({
|
|
||||||
status: 200,
|
async mockAsset(assetId, assetFilename, options) {
|
||||||
contentType: "application/javascript",
|
return BasePage.mockAsset(this.page, assetId, assetFilename, options);
|
||||||
body: `var penpotFlags = "${flags.join(" ")}";`,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
24
frontend/playwright/ui/pages/WasmWorkspacePage.js
Normal file
24
frontend/playwright/ui/pages/WasmWorkspacePage.js
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import { expect } from "@playwright/test";
|
||||||
|
import { WorkspacePage } from "./WorkspacePage";
|
||||||
|
|
||||||
|
export class WasmWorkspacePage extends WorkspacePage {
|
||||||
|
static async init(page) {
|
||||||
|
await super.init(page);
|
||||||
|
await WorkspacePage.mockConfigFlags(page, [
|
||||||
|
"enable-feature-render-wasm",
|
||||||
|
"enable-render-wasm-dpr",
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(page) {
|
||||||
|
super(page);
|
||||||
|
this.canvas = page.getByTestId("canvas-wasm-shapes");
|
||||||
|
}
|
||||||
|
|
||||||
|
async waitForCanvasRender() {
|
||||||
|
// FIXME: temp workaround. We will need to wait for set-objects to fully finish
|
||||||
|
await expect(this.pageName).toHaveText("Page 1");
|
||||||
|
await this.canvas.waitFor({ state: "visible" });
|
||||||
|
await this.page.waitForTimeout(3000);
|
||||||
|
}
|
||||||
|
}
|
|
@ -178,6 +178,10 @@ export class WorkspacePage extends BaseWebSocketPage {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async mockGetFile(jsonFile) {
|
||||||
|
await this.mockRPC(/get\-file\?/, jsonFile);
|
||||||
|
}
|
||||||
|
|
||||||
async setupFileWithComments() {
|
async setupFileWithComments() {
|
||||||
await this.mockRPC(
|
await this.mockRPC(
|
||||||
"get-comment-threads?file-id=*",
|
"get-comment-threads?file-id=*",
|
||||||
|
|
50
frontend/playwright/ui/render-wasm-specs/shapes.spec.js
Normal file
50
frontend/playwright/ui/render-wasm-specs/shapes.spec.js
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
import { test, expect } from "@playwright/test";
|
||||||
|
import { WasmWorkspacePage } from "../pages/WasmWorkspacePage";
|
||||||
|
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
await WasmWorkspacePage.init(page);
|
||||||
|
await WasmWorkspacePage.mockConfigFlags(page, [
|
||||||
|
"enable-feature-render-wasm",
|
||||||
|
"enable-render-wasm-dpr",
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Renders a file with basic shapes, boards and groups", async ({
|
||||||
|
page,
|
||||||
|
}) => {
|
||||||
|
const workspace = new WasmWorkspacePage(page);
|
||||||
|
await workspace.setupEmptyFile();
|
||||||
|
await workspace.mockGetFile("render-wasm/get-file-shapes-groups-boards.json");
|
||||||
|
|
||||||
|
await workspace.goToWorkspace({
|
||||||
|
id: "53a7ff09-2228-81d3-8006-4b5eac177245",
|
||||||
|
pageId: "53a7ff09-2228-81d3-8006-4b5eac177246",
|
||||||
|
});
|
||||||
|
await workspace.waitForCanvasRender();
|
||||||
|
|
||||||
|
await expect(workspace.canvas).toHaveScreenshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Renders a file with solid, gradient and image fills", async ({
|
||||||
|
page,
|
||||||
|
}) => {
|
||||||
|
const workspace = new WasmWorkspacePage(page);
|
||||||
|
await workspace.setupEmptyFile();
|
||||||
|
await workspace.mockAsset(
|
||||||
|
"1ebcea38-f1bf-8101-8006-4c8fd68e7c84",
|
||||||
|
"render-wasm/penguins.jpg",
|
||||||
|
);
|
||||||
|
await workspace.mockAsset(
|
||||||
|
"1ebcea38-f1bf-8101-8006-4c8f579da49c",
|
||||||
|
"render-wasm/penguins.jpg",
|
||||||
|
);
|
||||||
|
await workspace.mockGetFile("render-wasm/get-file-shapes-fills.json");
|
||||||
|
|
||||||
|
await workspace.goToWorkspace({
|
||||||
|
id: "1ebcea38-f1bf-8101-8006-4c8ec4a9bffe",
|
||||||
|
pageId: "1ebcea38-f1bf-8101-8006-4c8ec4a9bfff",
|
||||||
|
});
|
||||||
|
await workspace.waitForCanvasRender();
|
||||||
|
|
||||||
|
await expect(workspace.canvas).toHaveScreenshot();
|
||||||
|
});
|
|
@ -361,6 +361,7 @@
|
||||||
:viewport-ref viewport-ref}])]
|
:viewport-ref viewport-ref}])]
|
||||||
|
|
||||||
[:canvas {:id "render"
|
[:canvas {:id "render"
|
||||||
|
:data-testid "canvas-wasm-shapes"
|
||||||
:ref canvas-ref
|
:ref canvas-ref
|
||||||
:class (stl/css :render-shapes)
|
:class (stl/css :render-shapes)
|
||||||
:key (dm/str "render" page-id)
|
:key (dm/str "render" page-id)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue