48 lines
2.7 KiB
Markdown
48 lines
2.7 KiB
Markdown
# PR#142: UI Page Specs per Page
|
|
|
|
> **WARNING:** This document describes only the change applied in this PR.
|
|
> It may already be outdated once the next PR is merged.
|
|
> Historic PR-documentation is not maintained along with new PRs — treat it as a snapshot, not as current documentation.
|
|
|
|
## The Problem
|
|
|
|
All tests of the web pages stood in one spec, `UiControllerRestTest`: 52 tests, about 2 s per run.
|
|
PIT runs a whole spec for every mutant whose line the spec reaches.
|
|
Because this spec reaches every page, it covered 850 mutants in 25 classes in the nightly of 2026-10-10, and it ran for about 300 of them.
|
|
A mutant in the system page's gauges ran the tests of the artifact page as well.
|
|
|
|
## Non-Goals
|
|
|
|
- No test is changed, added or removed; they only move.
|
|
- No change to the pages.
|
|
|
|
## The Scenarios
|
|
|
|
The behaviour does not change, so the scenarios the moved tests verify stay as they are.
|
|
|
|
## The Solution
|
|
|
|
- `UiPageRestTest` is an abstract base with the annotations, the mocks and the setup of the former spec.
|
|
Because all page specs share exactly these, Spring builds their context once and caches it for all.
|
|
- Five specs extend it, one per page or page family:
|
|
|
|
| Spec | Tests | Pages |
|
|
|--------------------------|------:|-------------------------------------------------------|
|
|
| `UiLayoutRestTest` | 16 | what every page shares: header, footer, token, routes |
|
|
| `UiHomeRestTest` | 6 | home page and Repositories page |
|
|
| `UiBuildListsRestTest` | 14 | latest, branches, history and current views |
|
|
| `UiArtifactPageRestTest` | 14 | artifact page, its permanent form, reports and logs |
|
|
| `UiSystemPageRestTest` | 2 | system page |
|
|
|
|
A local PIT run of `UiController` and the views of its pages (`BuildRowView`, `CurrentBuildView`, `SystemMetricsView`, the `Home…` views), two minions, without history:
|
|
|
|
| Run | Duration | Killed | Timed out | Survived |
|
|
|------------|---------:|-------:|----------:|---------:|
|
|
| One spec | 551 s | 232 | 7 | 101 |
|
|
| Five specs | 317 s | 235 | 0 | 105 |
|
|
|
|
Four mutants that timed out before now survive: `ramTotal ?: "n/a"` in `SystemMetricsView.from`, `startedAt ?: ""` in `BuildRowView.from`, and two getters of `CurrentBuildView`.
|
|
With them, every test of the five specs passes, so no test checks these values; the timeouts had counted them as killed.
|
|
They are gaps that were there before; why the one spec ran out of time with them is not known.
|
|
No method gets above the limit of 15: `SystemMetricsView.from` scores 8.1, `BuildRowView.from` at most 13.7.
|