test(visual): rebaseline for the surface/table theme defaults

Picks up the AppShell and Table defaults added in "ui chnages". All 10
baselines moved, which is what a change to the shared theme should do: the
page now sits on --ema-surface-page so cards read as raised rather than
blending into it, and tables get the registry treatment — uppercase
letterspaced headers, hairline borders, hover tint.

Also fixes the skip-link test, which had been skipping in both apps rather
than running. It navigated to the landing route, which mounts no app shell
and so has no skip link to find — a skipped test that looks green while
asserting nothing. It now runs against the gallery, which mounts the same
SkipLink/MAIN_CONTENT_ID pair the real shells do; the shells themselves sit
behind auth, which this suite deliberately avoids depending on.

12 passing, 0 skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
fitse-yotor
2026-08-21 15:42:35 +03:00
parent 6b5b99f42d
commit b6c69f87a6
11 changed files with 7 additions and 15 deletions

View File

@@ -100,29 +100,21 @@ for (const app of APPS) {
}
/**
* The skip link, on a real app shell.
* The skip link.
*
* Not on the gallery route: the point of a skip link is bypassing the nav, and
* the gallery has none. The login page is the shell-less public route both apps
* share, so this uses the landing route instead — it carries the chrome without
* needing a session.
* A skip link is invisible until focused, so a broken one and a working one
* look identical in every screenshot — only a focus test separates them.
*
* A skip link is invisible until focused, which means a broken one and a
* working one look identical in every screenshot. Only a focus test separates
* them.
* Runs against the gallery, which mounts the same SkipLink/MAIN_CONTENT_ID
* pair the real shells do. The shells themselves live behind auth, and the
* public landing route carries no nav to skip past.
*/
test.describe('skip link', () => {
for (const app of APPS) {
test(`${app.name} — reveals on focus and targets main`, async ({ page }) => {
await page.goto(`${app.url}/`, { waitUntil: 'networkidle' });
await page.goto(`${app.url}/__gallery`, { waitUntil: 'networkidle' });
const link = page.locator('.ema-skip-link');
if ((await link.count()) === 0) {
// The public landing route does not mount the app shell in every app;
// skipping is honest here, where asserting absence would be wrong.
test.skip(true, 'landing route does not mount the app shell');
return;
}
// Off-screen until focused...
await expect(link).not.toBeInViewport();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 222 KiB

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 KiB

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

After

Width:  |  Height:  |  Size: 214 KiB