Summary
15 of nldesign's 42 specs carry a whole-spec @e2e exclude, suppressing 360 of 786
scenarios (46%). A further 225 are excluded per-scenario, so 585 of 786 (74%) are excluded and
only 59 were covered. Many of the stated reasons are false, and several are refuted by
nldesign's own test suite.
The reasons do not hold
An exclusion claims a browser cannot observe this. These claim otherwise:
| spec |
scenarios |
stated reason |
why it does not hold |
vng-token-set |
13 |
"CSS custom property values, colour palette, typography tokens … not testable" |
getComputedStyle(el).getPropertyValue('--…') reads exactly these. The app is a theming app; CSS variable values are its entire observable output. |
component-tokens |
11 |
"CSS variable naming — not testable via DOM" |
same |
nextcloud-variable-mapping |
11 |
"CSS variable mapping … file content" |
same |
css-architecture |
55 |
"CSS cascade order — not DOM-testable"; "@font-face declarations — not DOM-testable" |
Cascade order is observable from the ordered link[rel=stylesheet] list, and document.fonts enumerates loaded faces. dark-mode.spec.ts in this very repo already asserts stylesheet ORDER this way (expect(darkIndex).toBeGreaterThan(lightIndex)). |
hide-slogan |
31 |
"CSS selector behaviour on the login page … not DOM-testable" |
The login page is a page; a browser can load it and assert the slogan is not rendered. |
menu-labels |
36 |
"CSS typography/layout rules" |
observable via computed style |
token-set-dropdown |
6 |
"covered by admin-settings tests" |
not an observability claim at all — and admin-settings itself had 14 uncovered scenarios |
Several reasons are test-fixture objections wearing observability clothing — e.g.
vng-token-set: "requires selecting VNG token set — mutates IConfig". That is a setup cost, not
an impossibility; tests/e2e/workflows/*.workflow.spec.ts already mutate and restore config.
Per the fleet rule: reasons naming a test artifact hold; reasons naming a state of the
world rot. These name a state of the world, and it is not the case.
The excluding files are exclusion manifests
tests/e2e/spec-coverage/css-architecture.spec.ts contains 49 @e2e references and exactly one
test(). hide-slogan.spec.ts: 34 references, 1 test. component-tokens.spec.ts: 15, 1.
vng-token-set.spec.ts: 15, 1. They are documentation of what is not tested, shaped like a test
file.
To be explicit about what is not wrong: these excludes are not inflating the covered count.
A plain @e2e exclude <ref> credits nothing (verified against the checker's regexes), so
.github#345 does not fire here. The problem is only that the stated justifications are untrue.
Why this matters more for nldesign than elsewhere
nldesign is the government-theming app. Its contract is CSS variables carry the right values,
components use standard Nextcloud tokens, contrast meets WCAG AA. Those are precisely the claims
excluded as "not testable via DOM", and precisely the claims a browser is best placed to check. A
regression in vng-token-set's palette would currently be caught by nothing.
Proposed work
Reason-by-reason review of all 15 whole-spec excludes, replacing false ones with real tests:
- Token-set value assertions (
vng-token-set, component-tokens,
nextcloud-variable-mapping) — apply the set, read the custom properties back off
document.documentElement, assert the documented values. Also gives real WCAG AA contrast
coverage.
- Cascade order (
css-architecture) — extend the existing dark-mode.spec.ts ordering
pattern to the full documented layer sequence.
hide-slogan / menu-labels — toggle, load the login page / app menu, assert the rendered
result; restore.
Genuinely non-observable scenarios remain excludable — token-sync-workflow (GitHub Actions),
prometheus-metrics (scrape format), the occ-only generator scenarios in dark-mode, and
no-enforcetheme-usage-in-the-codebase (a source-grep assertion) are all fair. The point is that
the reason must be true one scenario at a time.
Measured while taking gate-19 from 142 → 126 with 16 new browser tests
(admin-only enforcement across 6 specs; the theme-preview lifecycle). Those 16 deliberately
avoided the excluded specs, so this backlog is untouched by that work.
Summary
15 of nldesign's 42 specs carry a whole-spec
@e2e exclude, suppressing 360 of 786scenarios (46%). A further 225 are excluded per-scenario, so 585 of 786 (74%) are excluded and
only 59 were covered. Many of the stated reasons are false, and several are refuted by
nldesign's own test suite.
The reasons do not hold
An exclusion claims a browser cannot observe this. These claim otherwise:
vng-token-setgetComputedStyle(el).getPropertyValue('--…')reads exactly these. The app is a theming app; CSS variable values are its entire observable output.component-tokensnextcloud-variable-mappingcss-architecture@font-facedeclarations — not DOM-testable"link[rel=stylesheet]list, anddocument.fontsenumerates loaded faces.dark-mode.spec.tsin this very repo already asserts stylesheet ORDER this way (expect(darkIndex).toBeGreaterThan(lightIndex)).hide-sloganmenu-labelstoken-set-dropdownadmin-settingsitself had 14 uncovered scenariosSeveral reasons are test-fixture objections wearing observability clothing — e.g.
vng-token-set: "requires selecting VNG token set — mutates IConfig". That is a setup cost, notan impossibility;
tests/e2e/workflows/*.workflow.spec.tsalready mutate and restore config.Per the fleet rule: reasons naming a test artifact hold; reasons naming a state of the
world rot. These name a state of the world, and it is not the case.
The excluding files are exclusion manifests
tests/e2e/spec-coverage/css-architecture.spec.tscontains 49@e2ereferences and exactly onetest().hide-slogan.spec.ts: 34 references, 1 test.component-tokens.spec.ts: 15, 1.vng-token-set.spec.ts: 15, 1. They are documentation of what is not tested, shaped like a testfile.
To be explicit about what is not wrong: these excludes are not inflating the covered count.
A plain
@e2e exclude <ref>credits nothing (verified against the checker's regexes), so.github#345does not fire here. The problem is only that the stated justifications are untrue.Why this matters more for nldesign than elsewhere
nldesign is the government-theming app. Its contract is CSS variables carry the right values,
components use standard Nextcloud tokens, contrast meets WCAG AA. Those are precisely the claims
excluded as "not testable via DOM", and precisely the claims a browser is best placed to check. A
regression in
vng-token-set's palette would currently be caught by nothing.Proposed work
Reason-by-reason review of all 15 whole-spec excludes, replacing false ones with real tests:
vng-token-set,component-tokens,nextcloud-variable-mapping) — apply the set, read the custom properties back offdocument.documentElement, assert the documented values. Also gives real WCAG AA contrastcoverage.
css-architecture) — extend the existingdark-mode.spec.tsorderingpattern to the full documented layer sequence.
hide-slogan/menu-labels— toggle, load the login page / app menu, assert the renderedresult; restore.
Genuinely non-observable scenarios remain excludable —
token-sync-workflow(GitHub Actions),prometheus-metrics(scrape format), theocc-only generator scenarios indark-mode, andno-enforcetheme-usage-in-the-codebase(a source-grep assertion) are all fair. The point is thatthe reason must be true one scenario at a time.
Measured while taking gate-19 from 142 → 126 with 16 new browser tests
(admin-only enforcement across 6 specs; the theme-preview lifecycle). Those 16 deliberately
avoided the excluded specs, so this backlog is untouched by that work.