Add expand/collapse plans buttons and test search box
Adds controls for finding a test in large results, as requested in TFT-5220. They sit in the header together with the "Show passed tests" toggle, in this order:
- Expand / collapse plans (icon-only buttons) open or close every plan block.
- Show passed tests, unchanged.
- Search tests by name filters tests as you type, ignoring case.
The search:
- renders only plans that contain a matching test, and opens them
- shows matching passed and skipped tests even with "Show passed tests" off, since you search to locate a test
- stays applied when you flip the toggles or follow a test link
- shows
No tests match "…"when nothing matches, in place of thepipeline.logsection
The plan buttons and search box show up whenever results.xml has plans, including while the request is still running. The "Show passed tests" toggle keeps its existing rule. Testsuite <details> now carry a plan class, so the buttons skip the AI summary and pipeline.log sections.
How to test
Run the Cypress suite, which includes a new view-controls test:
cypress/run-container.shTo try it in a browser, serve the repository root and open a scenario:
python3 -m http.server 8000- http://localhost:8000/results.html?url=scenarios/tmt-mixed has 8 plans and one failing test, so you see all three control groups.
- Click collapse, then expand: all 8 plans close and open, the hidden passed ones included.
- Type
distgit: only/plans/features/basicremains, with/tests/discover/distgit. - Type
core/:/plans/features/coreappears with its 16 passed tests, though "Show passed tests" is off. - Type
nonexistent: the page shows the no-match note and nopipeline.log. - Clear the box: the default view comes back.
- http://localhost:8000/results.html?url=scenarios/tmt-single-pass passed fully, so the header shows only the plan buttons and the search box.
A local page can't show the in-progress view, because it reads the request state from the Testing Farm API. The tmt-inprogress-pending Cypress test covers that case with a mocked API response.
Generated-by: Claude Code
