3.2 KiB
PR#75: Dashboard, RelayClient, ClaudeCodeSource and GiteaSource at a Mutation-CRAP of at Most 15
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.
Related Links
- werkregie PR#64, the Mutation-CRAP gate of each build.
- werkregie PR#74, still open, which changes these four classes and builds on this PR.
Problem
Since werkregie PR#64, a branch fails on each method above a Mutation-CRAP of 15 in a class it changes.
The open werkregie PR#74 changes Dashboard, RelayClient, ClaudeCodeSource and GiteaSource;
16 of their methods are above 15, GiteaSource.pullRequestItem at 1806 on main:
a complexity of 42 without a killed mutant, 42² + 42; PR#74 adds a branch to it, which makes 44² + 44 = 1980.
Non-Goals
- No change of behaviour.
- No other class;
Mainis the matter of werkregie PR#67.
Solution
The methods keep their behaviour; tests and a split bring each of them to at most 15. A method of a cyclomatic complexity above 15 cannot reach 15 by tests alone, so these were split:
GiteaSource.pullRequestItem(complexity 42):pullRequestbuilds thePullRequestfromstatusesOf,reviewsOf,isDraft,automergeandconflictSince.GiteaSource.flags(63): werkrevisor's state in the inner classReview;stuckFlags,reworkFlags,mergeFlagandownReviewFlagsin the order of the flags before.GiteaSource.activityItem(19) andpushItem(16):subjectOf,activityUrlandcommitsOf.ClaudeCodeSource.desktopItem(27):stateOf,desktopUrl,phoneUrl, and the item built apart from the filter.ClaudeCodeSource.Asks.of(18):flag,reason,waitsForUserandask;ofreturnedemptyList()early, and PIT's mutant that returns an empty list instead changes nothing there; nowofwraps theFlag?offlag, whose early returns arenull.ClaudeCodeSource.readLive:isAliveandliveOf.
New tests:
GiteaSourceFetchTestrunsGiteaSource.fetchagainst a fake Gitea: pull requests with statuses, reviews, the timeline and the time of a conflict, the activity feed, the token sources.ClaudeCodeSourceTest: two processes of one session, process files without a pid or broken, Desktop sessions without a title or archived while running, Jev at a threshold of 0.DashboardTest: a source without a ttl, a failing source, a refresh in the background.RelayClientTest: the token sources, a missing server address, an invalid name, another HTTP status.
ClaudeCodeSource no longer resets the time of Jev's last failure after a success:
a new request comes only after that time plus a minute, so the reset changed nothing.
The ratchet of the nightly run falls from 1806 to 812, now MatrixSource.message;
the change of dashboard/build.gradle.kts makes the check stricter, not weaker.
Version 0.45.1.
Open Questions
None.
Follow-up PRs
- werkregie PR#74, the author session of a stuck pull request, rebased onto this PR.