From 5136e3643510265bde72928c2f0c6d8a3b485e50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:30:45 +0000 Subject: [PATCH 01/10] build(deps): bump actions/upload-pages-artifact from 3.0.1 to 5.0.0 Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3.0.1 to 5.0.0. - [Release notes](https://github.com/actions/upload-pages-artifact/releases) - [Commits](https://github.com/actions/upload-pages-artifact/compare/56afc609e74202658d3ffba0e8f6dda462b719fa...fc324d3547104276b827a68afc52ff2a11cc49c9) --- updated-dependencies: - dependency-name: actions/upload-pages-artifact dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 1106d84..afea906 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -30,7 +30,7 @@ jobs: - run: pnpm check:site - run: pnpm test:browser - uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5 - - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 + - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 with: path: site/dist deploy: From e83524c976f41c63394a3637ae50df7fd82c684b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:30:51 +0000 Subject: [PATCH 02/10] build(deps): bump actions/setup-node from 4.4.0 to 7.0.0 Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4.4.0 to 7.0.0. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/49933ea5288caeca8642d1e84afbd3f7d6820020...820762786026740c76f36085b0efc47a31fe5020) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 4 ++-- .github/workflows/pages.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c40e9c7..c1cfad1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ jobs: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: persist-credentials: false - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: "24" - run: npm install --global pnpm@12.10.1 --ignore-scripts @@ -46,7 +46,7 @@ jobs: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: persist-credentials: false - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: "24" - run: npm install --global pnpm@12.10.1 --ignore-scripts diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 1106d84..91d71aa 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: persist-credentials: false - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: "24" - run: npm install --global pnpm@12.10.1 --ignore-scripts From 781f2745ca2b3dc1624e5d788bcefa1a07a0d829 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:30:55 +0000 Subject: [PATCH 03/10] build(deps): bump actions/deploy-pages from 4.0.5 to 5.0.1 Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 4.0.5 to 5.0.1. - [Release notes](https://github.com/actions/deploy-pages/releases) - [Commits](https://github.com/actions/deploy-pages/compare/d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e...368f82528645a54fb793d4d04e342629a3f51346) --- updated-dependencies: - dependency-name: actions/deploy-pages dependency-version: 5.0.1 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 1106d84..1056a8c 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -46,4 +46,4 @@ jobs: steps: - name: deploy static artifact id: deployment - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4 + uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1 From 461d01fc39bcc67285ca5ef87055ac5de1c8a9ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:30:59 +0000 Subject: [PATCH 04/10] build(deps): bump actions/configure-pages from 5.0.0 to 6.0.0 Bumps [actions/configure-pages](https://github.com/actions/configure-pages) from 5.0.0 to 6.0.0. - [Release notes](https://github.com/actions/configure-pages/releases) - [Commits](https://github.com/actions/configure-pages/compare/983d7736d9b0ae728b81ab479565c72886d7745b...45bfe0192ca1faeb007ade9deae92b16b8254a0d) --- updated-dependencies: - dependency-name: actions/configure-pages dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 1106d84..68bc135 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -29,7 +29,7 @@ jobs: - run: pnpm build - run: pnpm check:site - run: pnpm test:browser - - uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5 + - uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0 - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 with: path: site/dist From 3360f40c99a42acbedc450acd36a29ebe20c5609 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:31:03 +0000 Subject: [PATCH 05/10] build(deps): bump actions/checkout from 4.4.0 to 7.0.1 Bumps [actions/checkout](https://github.com/actions/checkout) from 4.4.0 to 7.0.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/11d5960a326750d5838078e36cf38b85af677262...3d3c42e5aac5ba805825da76410c181273ba90b1) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 4 ++-- .github/workflows/pages.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c40e9c7..672334e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: offline: runs-on: ubuntu-latest steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 @@ -43,7 +43,7 @@ jobs: --health-cmd 'pg_isready -U fixture_owner -d dbdep_examples' --health-interval 5s --health-timeout 5s --health-retries 10 steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 1106d84..15132e3 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -14,7 +14,7 @@ jobs: contents: read pages: read steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 From 81f1a9cb09f488ecf000329092c12dd0976ac7cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:31:14 +0000 Subject: [PATCH 06/10] build(deps-dev): bump @playwright/test from 1.56.0 to 1.63.0 Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.56.0 to 1.63.0. - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.56.0...v1.63.0) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-version: 1.63.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- pnpm-lock.yaml | 42 ++++++++++++++++-------------------------- 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 5905d02..ce1f7bd 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "pg-connection-string": "2.14.1" }, "devDependencies": { - "@playwright/test": "1.56.0", + "@playwright/test": "1.63.0", "fflate": "0.8.3", "prettier": "3.9.9" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b0e208..0c41968 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -186,8 +186,8 @@ importers: version: 2.14.1 devDependencies: '@playwright/test': - specifier: 1.56.0 - version: 1.56.0 + specifier: 1.63.0 + version: 1.63.0 fflate: specifier: 0.8.3 version: 0.8.3 @@ -249,9 +249,9 @@ packages: '@pgsql/types@18.0.0': resolution: {integrity: sha512-jtAY4JU7jdVYZ/Vv3zlZqVP+FRWZokyCLKPPCnAApiaJAElpyyiMC3HRiquBu29kSrVs+rkqZD50SUIb/zyEGw==} - '@playwright/test@1.56.0': - resolution: {integrity: sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==} - engines: {node: '>=18'} + '@playwright/test@1.63.0': + resolution: {integrity: sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==} + engines: {node: '>=20'} hasBin: true '@rolldown/binding-android-arm-eabi@1.2.13': @@ -532,11 +532,6 @@ packages: react-dom: optional: true - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -702,14 +697,14 @@ packages: resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} - playwright-core@1.56.0: - resolution: {integrity: sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==} - engines: {node: '>=18'} + playwright-core@1.63.0: + resolution: {integrity: sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==} + engines: {node: '>=20'} hasBin: true - playwright@1.56.0: - resolution: {integrity: sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==} - engines: {node: '>=18'} + playwright@1.63.0: + resolution: {integrity: sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==} + engines: {node: '>=20'} hasBin: true postcss@8.5.29: @@ -835,9 +830,9 @@ snapshots: '@pgsql/types@18.0.0': {} - '@playwright/test@1.56.0': + '@playwright/test@1.63.0': dependencies: - playwright: 1.56.0 + playwright: 1.63.0 '@rolldown/binding-android-arm-eabi@1.2.13': optional: true @@ -990,9 +985,6 @@ snapshots: react: 19.3.0 react-dom: 19.3.0(react@19.3.0) - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true @@ -1112,13 +1104,11 @@ snapshots: picomatch@4.0.7: {} - playwright-core@1.56.0: {} + playwright-core@1.63.0: {} - playwright@1.56.0: + playwright@1.63.0: dependencies: - playwright-core: 1.56.0 - optionalDependencies: - fsevents: 2.3.2 + playwright-core: 1.63.0 postcss@8.5.29: dependencies: From e05e28ebbb8ca8e7b30ed3dd8ddeb839e42d41db Mon Sep 17 00:00:00 2001 From: JoseDFlorez <63378897+JoseDFN@users.noreply.github.com> Date: Fri, 9 Oct 2026 17:08:47 -0500 Subject: [PATCH 07/10] =?UTF-8?q?=E2=9C=85=20test:=20verify=20report=20per?= =?UTF-8?q?sistence=20with=20defined=20storage=20origins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verify offline report preferences by reloading the same file without a clearing initialization script. Add an independent cross-tab assertion for the actual generated report served through a defined HTTP origin. Chromium file-origin storage sharing is unspecified and the former new-tab assumption failed on both Playwright versions in Linux CI. Preserve default language, system theme, saved preferences and cross-tab coverage. The corrected persistence and keyboard cases passed 30 repeated local checks. --- tests/browser/report-preferences.spec.mjs | 37 ++++++++++++++++++----- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/tests/browser/report-preferences.spec.mjs b/tests/browser/report-preferences.spec.mjs index 6bf7f12..793e8ab 100644 --- a/tests/browser/report-preferences.spec.mjs +++ b/tests/browser/report-preferences.spec.mjs @@ -129,7 +129,6 @@ test("English is the default and theme follows the system until explicitly chose page, }) => { await page.emulateMedia({ colorScheme: "dark" }); - await page.addInitScript(() => localStorage.clear()); await page.goto(reportUrl); await expect(page.locator("html")).toHaveAttribute("lang", "en"); await expect(page.locator("html")).toHaveAttribute("data-theme", "dark"); @@ -141,12 +140,36 @@ test("English is the default and theme follows the system until explicitly chose localStorage.getItem("dbdep-locale"), ]), ).toEqual(["light", "es"]); - // Remove the initialization script by loading the same file in a new page in this context. - const reloaded = await page.context().newPage(); - await reloaded.goto(reportUrl); - await expect(reloaded.locator("html")).toHaveAttribute("lang", "es"); - await expect(reloaded.locator("html")).toHaveAttribute("data-theme", "light"); - await reloaded.close(); + await page.reload(); + await expect(page.locator("html")).toHaveAttribute("lang", "es"); + await expect(page.locator("html")).toHaveAttribute("data-theme", "light"); +}); + +test("report preferences persist between tabs with the same HTTP origin", async ({ + page, + context, +}) => { + // Cross-tab storage sharing is defined for HTTP origins, not file URLs. + const url = "http://127.0.0.1:4173/preference-report.html"; + const body = await readFile(new URL(reportUrl), "utf8"); + await context.route(url, (route) => + route.fulfill({ contentType: "text/html", body }), + ); + await page.emulateMedia({ colorScheme: "light" }); + await page.goto(url); + await page.getByRole("button", { name: "Switch to dark mode" }).click(); + await page.getByRole("button", { name: "Español", exact: true }).click(); + expect( + await page.evaluate(() => [ + localStorage.getItem("dbdep-theme"), + localStorage.getItem("dbdep-locale"), + ]), + ).toEqual(["dark", "es"]); + const reopened = await context.newPage(); + await reopened.goto(url); + await expect(reopened.locator("html")).toHaveAttribute("lang", "es"); + await expect(reopened.locator("html")).toHaveAttribute("data-theme", "dark"); + await reopened.close(); }); test("preferences remain usable when browser storage throws", async ({ From 0891c5a57e0dc72ef8e673c691401e70262da980 Mon Sep 17 00:00:00 2001 From: JoseDFlorez <63378897+JoseDFN@users.noreply.github.com> Date: Fri, 9 Oct 2026 17:08:47 -0500 Subject: [PATCH 08/10] =?UTF-8?q?=E2=9C=85=20test:=20wait=20for=20the=20sk?= =?UTF-8?q?ip=20link=20before=20keyboard=20navigation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wait until React has rendered the skip link before sending the first Tab key in the documentation accessibility test. Page load can finish before the asynchronous root render, causing keyboard input to arrive while no application link exists. Keep the actual Tab and Enter interactions and the focus and route assertions. The corrected keyboard and persistence cases passed 30 repeated checks; no timing sleeps or retries were added. --- tests/browser/site-docs.spec.mjs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/browser/site-docs.spec.mjs b/tests/browser/site-docs.spec.mjs index 4d55018..5e940f1 100644 --- a/tests/browser/site-docs.spec.mjs +++ b/tests/browser/site-docs.spec.mjs @@ -91,6 +91,9 @@ test("the skip link focuses the current documentation page without changing its page, }) => { await page.goto(`${site}/#/docs/installation`); + await expect( + page.getByRole("link", { name: "Skip to content" }), + ).toBeVisible(); await page.keyboard.press("Tab"); await expect( page.getByRole("link", { name: "Skip to content" }), From 8c141b1a3734059c5eae216636b6feca5d45cd19 Mon Sep 17 00:00:00 2001 From: JoseDFlorez <63378897+JoseDFN@users.noreply.github.com> Date: Fri, 9 Oct 2026 17:08:47 -0500 Subject: [PATCH 09/10] =?UTF-8?q?=E2=9C=85=20test:=20verify=20report=20per?= =?UTF-8?q?sistence=20with=20defined=20storage=20origins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verify offline report preferences by reloading the same file without a clearing initialization script. Add an independent cross-tab assertion for the actual generated report served through a defined HTTP origin. Chromium file-origin storage sharing is unspecified and the former new-tab assumption failed on both Playwright versions in Linux CI. Preserve default language, system theme, saved preferences and cross-tab coverage. The corrected persistence and keyboard cases passed 30 repeated local checks. --- tests/browser/report-preferences.spec.mjs | 37 ++++++++++++++++++----- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/tests/browser/report-preferences.spec.mjs b/tests/browser/report-preferences.spec.mjs index 6bf7f12..793e8ab 100644 --- a/tests/browser/report-preferences.spec.mjs +++ b/tests/browser/report-preferences.spec.mjs @@ -129,7 +129,6 @@ test("English is the default and theme follows the system until explicitly chose page, }) => { await page.emulateMedia({ colorScheme: "dark" }); - await page.addInitScript(() => localStorage.clear()); await page.goto(reportUrl); await expect(page.locator("html")).toHaveAttribute("lang", "en"); await expect(page.locator("html")).toHaveAttribute("data-theme", "dark"); @@ -141,12 +140,36 @@ test("English is the default and theme follows the system until explicitly chose localStorage.getItem("dbdep-locale"), ]), ).toEqual(["light", "es"]); - // Remove the initialization script by loading the same file in a new page in this context. - const reloaded = await page.context().newPage(); - await reloaded.goto(reportUrl); - await expect(reloaded.locator("html")).toHaveAttribute("lang", "es"); - await expect(reloaded.locator("html")).toHaveAttribute("data-theme", "light"); - await reloaded.close(); + await page.reload(); + await expect(page.locator("html")).toHaveAttribute("lang", "es"); + await expect(page.locator("html")).toHaveAttribute("data-theme", "light"); +}); + +test("report preferences persist between tabs with the same HTTP origin", async ({ + page, + context, +}) => { + // Cross-tab storage sharing is defined for HTTP origins, not file URLs. + const url = "http://127.0.0.1:4173/preference-report.html"; + const body = await readFile(new URL(reportUrl), "utf8"); + await context.route(url, (route) => + route.fulfill({ contentType: "text/html", body }), + ); + await page.emulateMedia({ colorScheme: "light" }); + await page.goto(url); + await page.getByRole("button", { name: "Switch to dark mode" }).click(); + await page.getByRole("button", { name: "Español", exact: true }).click(); + expect( + await page.evaluate(() => [ + localStorage.getItem("dbdep-theme"), + localStorage.getItem("dbdep-locale"), + ]), + ).toEqual(["dark", "es"]); + const reopened = await context.newPage(); + await reopened.goto(url); + await expect(reopened.locator("html")).toHaveAttribute("lang", "es"); + await expect(reopened.locator("html")).toHaveAttribute("data-theme", "dark"); + await reopened.close(); }); test("preferences remain usable when browser storage throws", async ({ From 0ad0b710e1bdad348382c689239091dea8a5d850 Mon Sep 17 00:00:00 2001 From: JoseDFlorez <63378897+JoseDFN@users.noreply.github.com> Date: Fri, 9 Oct 2026 17:08:47 -0500 Subject: [PATCH 10/10] =?UTF-8?q?=E2=9C=85=20test:=20wait=20for=20the=20sk?= =?UTF-8?q?ip=20link=20before=20keyboard=20navigation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wait until React has rendered the skip link before sending the first Tab key in the documentation accessibility test. Page load can finish before the asynchronous root render, causing keyboard input to arrive while no application link exists. Keep the actual Tab and Enter interactions and the focus and route assertions. The corrected keyboard and persistence cases passed 30 repeated checks; no timing sleeps or retries were added. --- tests/browser/site-docs.spec.mjs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/browser/site-docs.spec.mjs b/tests/browser/site-docs.spec.mjs index 4d55018..5e940f1 100644 --- a/tests/browser/site-docs.spec.mjs +++ b/tests/browser/site-docs.spec.mjs @@ -91,6 +91,9 @@ test("the skip link focuses the current documentation page without changing its page, }) => { await page.goto(`${site}/#/docs/installation`); + await expect( + page.getByRole("link", { name: "Skip to content" }), + ).toBeVisible(); await page.keyboard.press("Tab"); await expect( page.getByRole("link", { name: "Skip to content" }),