Skip to content

360 scenarios blanket-excluded from gate-19 on reasons that are false — CSS variables and cascade order ARE browser-observable #263

Description

@rubenvdlinde

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:

  1. 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.
  2. Cascade order (css-architecture) — extend the existing dark-mode.spec.ts ordering
    pattern to the full documented layer sequence.
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions