From e52a3022173fb3a2b7b5a5dedae1e736dfb82d0b Mon Sep 17 00:00:00 2001 From: Todd Schiller Date: Wed, 10 Apr 2024 15:52:19 -0400 Subject: [PATCH 01/17] #8206: playwright tests for links --- .../tests/sidebar/sidebarLinks.spec.ts | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts diff --git a/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts b/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts new file mode 100644 index 0000000000..d543ea56f7 --- /dev/null +++ b/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024 PixieBrix, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { test, expect } from "../../fixtures/extensionBase"; +import { ActivateModPage } from "../../pageObjects/extensionConsole/modsPage"; +// @ts-expect-error -- https://youtrack.jetbrains.com/issue/AQUA-711/Provide-a-run-configuration-for-Playwright-tests-in-specs-with-fixture-imports-only +import { test as base } from "@playwright/test"; +import { getSidebarPage } from "../../utils"; + +test("8206: clicking links doesn't crash browser", async ({ + page, + extensionId, +}) => { + const modId = "@pixies/test/sidebar-links"; + + const modActivationPage = new ActivateModPage(page, extensionId, modId); + await modActivationPage.goto(); + + await modActivationPage.clickActivateAndWaitForModsPageRedirect(); + + await page.goto("/"); + + // The mod contains a trigger to open the sidebar on h1 + await page.click("h1"); + + const sideBarPage = await getSidebarPage(page, extensionId); + await expect( + sideBarPage.getByRole("heading", { name: "Sidebar Links" }), + ).toBeVisible(); + + await sideBarPage.getByRole("link", { name: "Markdown Text Link" }).click(); + + // Is a react-bootstrap button link variant + await sideBarPage.getByRole("button", { name: "Open a Tab Link" }).click(); + + await sideBarPage.getByRole("link", { name: "HTML Renderer Link" }).click(); + + await sideBarPage.getByRole("link", { name: "Embedded Form Link" }).click(); + + // FIXME: get these selectors working + // PixieBrix uses 2 layers of frames to get around the host page CSP. Test page has 2 layers + // const pixiebrixFrame = page.frameLocator("iframe").first(); + // const mainFrame = pixiebrixFrame.frameLocator("iframe").first(); + // await expect(mainFrame.getByText("Alpha")).toBeVisible(); + // + // const srcdocFrame = mainFrame.frameLocator("iframe").first(); + // await srcdocFrame.getByRole("link", { name: "IFrame Link" }).click(); +}); From 0fd07f4e2872c2eeab1c364f41fc396a63d09381 Mon Sep 17 00:00:00 2001 From: Todd Schiller Date: Wed, 10 Apr 2024 16:00:16 -0400 Subject: [PATCH 02/17] Open the extension console --- end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts | 2 ++ src/sidebar/Header.tsx | 1 + 2 files changed, 3 insertions(+) diff --git a/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts b/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts index d543ea56f7..acd3629598 100644 --- a/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts +++ b/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts @@ -42,6 +42,8 @@ test("8206: clicking links doesn't crash browser", async ({ sideBarPage.getByRole("heading", { name: "Sidebar Links" }), ).toBeVisible(); + await sideBarPage.getByTitle("Open Extension Console").click(); + await sideBarPage.getByRole("link", { name: "Markdown Text Link" }).click(); // Is a react-bootstrap button link variant diff --git a/src/sidebar/Header.tsx b/src/sidebar/Header.tsx index e069446183..4fe4208cdd 100644 --- a/src/sidebar/Header.tsx +++ b/src/sidebar/Header.tsx @@ -103,6 +103,7 @@ const Header: React.FunctionComponent = () => { size="sm" variant="link" className={headerButtonClassName} + title="Open Extension Console" > From 5be8e0e3ca9c86705156a970498033b613d6470f Mon Sep 17 00:00:00 2001 From: Todd Schiller Date: Wed, 10 Apr 2024 16:29:43 -0400 Subject: [PATCH 03/17] Fix jest snapshots --- end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts | 2 +- src/sidebar/__snapshots__/Header.test.tsx.snap | 2 ++ src/sidebar/__snapshots__/SidebarBody.test.tsx.snap | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts b/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts index acd3629598..137166553f 100644 --- a/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts +++ b/end-to-end-tests/tests/sidebar/sidebarLinks.spec.ts @@ -55,7 +55,7 @@ test("8206: clicking links doesn't crash browser", async ({ // FIXME: get these selectors working // PixieBrix uses 2 layers of frames to get around the host page CSP. Test page has 2 layers - // const pixiebrixFrame = page.frameLocator("iframe").first(); + // const pixiebrixFrame = sideBarPage.frameLocator("iframe").first(); // const mainFrame = pixiebrixFrame.frameLocator("iframe").first(); // await expect(mainFrame.getByText("Alpha")).toBeVisible(); // diff --git a/src/sidebar/__snapshots__/Header.test.tsx.snap b/src/sidebar/__snapshots__/Header.test.tsx.snap index c082015691..a8569a18b7 100644 --- a/src/sidebar/__snapshots__/Header.test.tsx.snap +++ b/src/sidebar/__snapshots__/Header.test.tsx.snap @@ -38,6 +38,7 @@ exports[`Header renders 1`] = `