test(news): respect sandboxed preview focus and browser isolation
CI / check (push) Successful in 4m10s
CI / deploy (push) Failing after 1m49s
CI / publish-container (push) Skipped

This commit is contained in:
Simo committed 2026-09-13 20:48:26 +02:00
1 parent 46f7ad6571
commit 043c763484
3 files changed
+7 -3

No files matched your search

+2
View File
@@ -21,6 +21,8 @@ One Chromium journey exercises the candidate's normal Docker entrypoint and stan
No authentication, application HTTP responses, mutations, database calls or cache calls are mocked. The browser blocks resources outside the local fixture origin, such as external avatars. This does not replace any application response. A local HTTPS edge passes requests to Next and sets trusted forwarding headers, allowing the production Secure-cookie behavior to run normally.
The fresh browser contexts retain normal application service-worker registration. The application worker does not cache article or authentication responses. Playwright's worker-blocking injection is avoided because it throws inside the sandboxed preview; browser errors are still checked without filtering. The preview is closed through its Close button, since keyboard events inside its sandbox do not reach the parent dialog.
## Isolation and cleanup
- Each run creates a random Docker network and fresh MariaDB, Redis and candidate containers. All mapped ports are allocated dynamically. The HTTPS listener binds only to `127.0.0.1`.
+5 -2
View File
@@ -51,7 +51,6 @@ test("staff signs in, saves a draft, previews it and publishes to anonymous read
baseURL,
locale: "en-US",
ignoreHTTPSErrors: true,
serviceWorkers: "block",
});
const reader = await anonymous.newPage();
const errors: string[] = [];
@@ -199,7 +198,11 @@ test("staff signs in, saves a draft, previews it and publishes to anonymous read
expect(
await rows("SELECT id FROM website_article_revisions"),
).toHaveLength(0);
await page.keyboard.press("Escape");
// Preview autofocus enters its sandboxed iframe, whose Escape event cannot reach the dialog.
await page
.getByRole("dialog")
.getByRole("button", { name: "Close", exact: true })
.click();
await expect(page.getByRole("dialog")).toHaveCount(0);
});
await test.step("publish once and persist revision, audit and delivery intent", async () => {
-1
View File
@@ -25,7 +25,6 @@ export default defineConfig({
baseURL: process.env.NEWS_E2E_BASE_URL,
locale: "en-US",
ignoreHTTPSErrors: true,
serviceWorkers: "block",
trace: "retain-on-failure",
screenshot: "only-on-failure",
video: "off",