Skip to content

fix(e2e): three reasons this leg is red — the demo-data choice, the Suggest-feature link, and a stale page-type copy - #1845

Merged
rubenvdlinde merged 3 commits into
developmentfrom
fix/demo-e2e-arranges-its-own-choice
Sep 5, 2026
Merged

fix(e2e): three reasons this leg is red — the demo-data choice, the Suggest-feature link, and a stale page-type copy#1845
rubenvdlinde merged 3 commits into
developmentfrom
fix/demo-e2e-arranges-its-own-choice

Conversation

@rubenvdlinde

@rubenvdlinde rubenvdlinde commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Three failures on the E2E leg, unrelated to each other, all making development red on every push. It has not been green since 2026-09-03.

1. The demo-data test never chose a dataset

installing the demo data reports HOW MUCH landed, not just success posts the load action and then asserts the message names a non-zero object count. It never says which dataset to load.

That was fine while the step was a bare run-action. The step is a choice followed by a load step now, and the CI seed settles the optional steps by posting skip-demo-data, which records demo_dataset = none. The load then does exactly the right thing and imports nothing, so the test asserted against a decision it never made.

  • api() gained a body parameter. It had none, so a test could not post a choice at all.
  • Both install tests call pickShippedDataset(page) first, reading the id from GET /api/setup/status rather than writing 'demo' as a literal. The choice step declares optionsSource: datasets and carries no options of its own, so that response is the list an operator sees.

2. The Suggest-feature CTA is a link now

nextcloud-vue 2.36.4 deleted CnSuggestFeatureModal (team decision 2026-09-04: the forge is where the conversation happens). The header CTA became an anchor to the forge's feature-request issue form, and an <a href> has role link, so getByRole('button') matched nothing on a page that renders perfectly well.

The interactive test reads the target instead of clicking it. Clicking now leaves the app for a real issue form on a real forge, which in CI means navigating off the instance under test and out to the network.

3. The page-type list was a copy of an enum, and it drifted

manifest-pages.spec.ts kept twelve hand-written page types. reports has been in the manifest schema for a while, the manifest started using it, and this test called it unknown. Five types the copy was missing come back: reports, store, search, flows, flow-detail.

The set is read from the vendored schema now, and it throws if the enum is not there rather than falling back to a default — a test that cannot find the schema must say so, not quietly accept every type it is shown.

The Reports page also joins MANIFEST_PAGES, which is exactly what the sibling anti-staleness guard was reporting: a page nothing navigates to stops being smoke-tested with nothing going red. The table drives one test per entry, so /reports is driven now.

Verified

prettier, eslint and playwright test --list are green on all three changed files; the list collects 41 tests in manifest-pages.spec.ts, one per manifest page plus the four guards. The E2E leg is skipping on pull requests and runs on the development push, so the run after this merges is where it is proven.

🤖 Generated with Claude Code

The demo-data step is a choice followed by a load step now, and the CI
seed settles the optional steps by posting `skip-demo-data` — which
records `demo_dataset = none`. The load action then correctly imports
nothing and answers "No example data was loaded", so `installing the
demo data reports HOW MUCH landed` asserted against a decision it never
made. It went red on every app whose seed reaches that line.

It picks the shipped dataset first now, and it reads the id from
`/api/setup/status` rather than writing a literal: the choice step reads
its options from exactly that list, so a hardcoded id can pass while the
list an operator sees is empty.

The `api()` helper gained a body, which it needed to post the choice at
all.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
nextcloud-vue 2.36.4 deleted CnSuggestFeatureModal — team decision
2026-09-04, the forge is where the conversation happens. The Features &
roadmap header CTA became an anchor to the forge feature-request issue
form, and an <a href> has role link, not button.

So the assertion matched nothing on a page that renders perfectly well,
and this leg has been red on development on every push since the app
took ^2.36.4.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@rubenvdlinde rubenvdlinde changed the title fix(e2e): the demo-data test arranges the choice it asserts against fix(e2e): the demo-data test arranges its choice, and the Suggest-feature CTA is a link Sep 5, 2026
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/integriq @ 7054c1f

Check PHP Vue Security License Tests
lint
phpcs ⏭️
phpmd ⏭️
psalm ⏭️
phpstan ⏭️
phpmetrics
eslint
stylelint ⏭️
build
format
check-schema-l10n
composer ⏭️ ⏭️
npm ⏭️
app:check-code ⏭️
info.xml ⏭️
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-09-05 12:39 UTC

Download the full PDF report from the workflow artifacts.

…d from it

Two failures, one root: `manifest-pages.spec.ts` kept a hand-written
copy of the schema page-type enum, and the copy fell behind. `reports`
has been a type the manifest schema accepts for a while, the manifest
started using it, and this test called it unknown.

The set is read from the vendored schema now. It throws if the enum is
not there rather than falling back: a test that cannot find the schema
must say so, not quietly accept every type it is shown. Five types the
copy was missing come back with it — reports, store, search, flows and
flow-detail.

The Reports page also joins MANIFEST_PAGES, which is what the sibling
anti-staleness guard was telling us: a page nothing navigates to is a
page that stops being smoke-tested with nothing going red. The table
drives one test per entry, so the page is driven now.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@rubenvdlinde rubenvdlinde changed the title fix(e2e): the demo-data test arranges its choice, and the Suggest-feature CTA is a link fix(e2e): three reasons this leg is red — the demo-data choice, the Suggest-feature link, and a stale page-type copy Sep 5, 2026
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/integriq @ 44a6ab0

Check PHP Vue Security License Tests
lint ⏭️
phpcs ⏭️
phpmd ⏭️
psalm ⏭️
phpstan ⏭️
phpmetrics ⏭️
eslint ⏭️
stylelint ⏭️
build ⏭️
composer ⏭️ ⏭️
npm ⏭️ ⏭️
app:check-code ⏭️
info.xml ⏭️
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-09-05 12:46 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/integriq @ 910d785

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
build
check-specs
test-l10n
format
check-schema-l10n
check-l10n-js
composer ✅ 141/141
npm ✅ 537/537
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development
Hydra gates

Quality workflow — 2026-09-05 13:03 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 6dde7b5 into development Sep 5, 2026
52 checks passed
rubenvdlinde added a commit that referenced this pull request Sep 6, 2026
…is-broken

development landed the Reports regression guards independently (#1845),
and did it better: MANIFEST_PAGES now reads the page-type enum from the
schema instead of copying it, so the copy cannot drift again. That side
is kept and my hand-written STANDARD set is dropped.

What survives from this branch is the part development does not have:
the OperationalHealth entry in the page table, and the 501
APP_NOT_AVAILABLE console filter for MappingDetail.

The merged tree is byte-identical to the rebase this replaces, which was
the tree verified against all 80 applicable gates.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant