Toter Code, zweite Runde (B): nur noch von Tests aufgerufen #118

Open
opened 2026-10-20 09:42:53 +00:00 by claude · 0 comments
Collaborator

Aus dem Project-Review vom 20.10.2026 (quality/2 und Fundgrube), Fortsetzung von #45. Nach der Regel in CLAUDE.md („Kein Produktivcode nur für Tests“) wird alles hier gelöscht, und die Tests gehen den Weg der Produktion. Hier ändern sich Tests mit. Geprüft auf main 4e9c05c. Bei Endpunkten habe ich nach der URL gesucht: portal, content, homepage, shared, e2e und scripts/ rufen sie nicht auf.

Endpunkte

Endpunkt Methode Tests
GET /api/players/pending AdminPlayerResource.listPending AdminPlayerResourceTest
GET /api/competition/liga/match/{id} CompetitionLigaResource.match CompetitionLigaResourceTest. Die Homepage nutzt /api/public/liga/match, also PublicLigaResource
GET /api/seasons/active/name SeasonResource.getActiveSeasonName SeasonActiveNameTest, SeasonActiveEmptyTest (beide ganz), SeasonResourceTest. Der letzte Frontend-Aufruf ist mit f88a3eb (02.08.) entfallen
PUT /api/seasons/{id} SeasonResource.updateSeason SeasonResourceTest, SeasonNameFormatTest (der PUT-Fall). requireLangform bleibt für das Anlegen
GET /api/competition/elo/player/{playerId} EloResource.history EloResourceTest. Danach ist auch EloService.history tot
POST /api/competition/elo/recalculate/{seasonId} EloResource.recalculate EloResourceTest. Folge: Eine Neuberechnung von Hand geht danach nur noch per Deploy. Eine Oberfläche oder ein Skript dafür gibt es nicht

Durch die Endpunkte ändert sich openapi.json, also mvn -B clean verify und das Schema mitcommitten.

Zweig in DELETE /api/competition/team-matches

Das Portal (SchedulePage.tsx) schickt immer categoryId und halbserie mit. Den Zweig ohne categoryId (ganze Saison löschen) nutzen nur Tests. Fällt er weg, verlieren MatchRepository.deleteBySeasonId und ScheduleLockRepository.countBySeasonId ihren einzigen Produktivaufrufer. Die Tests, die diese Methoden als Aufräumhilfe nutzen (TournamentTestFixtures, EloSnapshotRepositoryTest, MatchRepositoryTest), gehen dann über JPA.

Repository- und Service-Methoden

  • MatchRepository.countBySeasonId: nur MatchRepositoryTest. Der Test zählt stattdessen über die Datenbank.
  • HalbseriePublicationService.isPublished(seasonId, halbserie): nur HalbseriePublicationTest und ScheduleLockServiceTest. Die Tests lesen die SeasonHalbserie-Zeile.
  • SeasonHalbserieService.halbserieOf(seasonId, date): nur SeasonHalbserieServiceTest. Wird mit seinen Testfällen gelöscht. Nicht zu verwechseln mit ScheduleLockService.halbserieOf(RoundKind), das lebt.
  • SeasonSetupService.ensureCategories: nur SeasonSetupServiceTest (zwei Fälle). Wird mit ihnen gelöscht.

Frontend

  • Homepage cup-view.ts: positionState und der Typ CupPositionState liest nur cup-view.test.ts. Löschen, samt Testblock.
  • Portal allowed-period.ts: allowedPeriodSentence liest nur allowed-period.test.ts. Löschen, samt Testblock. Dazu: swissDate dupliziert longDate aus season-phase.ts und wird dadurch ersetzt.

Nicht hier

VenueRepository.findValidAt ist ebenfalls ohne Produktivaufrufer. Es hängt aber an einem Fehler in der Spiellokal-Auswahl (#119) und bleibt, bis der entschieden ist.

Abnahme

  • mvn -B clean verify und generate grün; Builds von homepage, portal und content grün; E2E grün.
  • metrics.py checks meldet die Stellen unter quality/2 nicht mehr.
Aus dem Project-Review vom 20.10.2026 (quality/2 und Fundgrube), Fortsetzung von #45. Nach der Regel in CLAUDE.md („Kein Produktivcode nur für Tests“) wird alles hier gelöscht, und die Tests gehen den Weg der Produktion. **Hier ändern sich Tests mit.** Geprüft auf `main` 4e9c05c. Bei Endpunkten habe ich nach der URL gesucht: portal, content, homepage, shared, e2e und `scripts/` rufen sie nicht auf. ## Endpunkte | Endpunkt | Methode | Tests | |---|---|---| | `GET /api/players/pending` | `AdminPlayerResource.listPending` | `AdminPlayerResourceTest` | | `GET /api/competition/liga/match/{id}` | `CompetitionLigaResource.match` | `CompetitionLigaResourceTest`. Die Homepage nutzt `/api/public/liga/match`, also `PublicLigaResource` | | `GET /api/seasons/active/name` | `SeasonResource.getActiveSeasonName` | `SeasonActiveNameTest`, `SeasonActiveEmptyTest` (beide ganz), `SeasonResourceTest`. Der letzte Frontend-Aufruf ist mit f88a3eb (02.08.) entfallen | | `PUT /api/seasons/{id}` | `SeasonResource.updateSeason` | `SeasonResourceTest`, `SeasonNameFormatTest` (der PUT-Fall). `requireLangform` bleibt für das Anlegen | | `GET /api/competition/elo/player/{playerId}` | `EloResource.history` | `EloResourceTest`. Danach ist auch `EloService.history` tot | | `POST /api/competition/elo/recalculate/{seasonId}` | `EloResource.recalculate` | `EloResourceTest`. **Folge:** Eine Neuberechnung von Hand geht danach nur noch per Deploy. Eine Oberfläche oder ein Skript dafür gibt es nicht | Durch die Endpunkte ändert sich `openapi.json`, also `mvn -B clean verify` und das Schema mitcommitten. ## Zweig in `DELETE /api/competition/team-matches` Das Portal (`SchedulePage.tsx`) schickt immer `categoryId` und `halbserie` mit. Den Zweig ohne `categoryId` (ganze Saison löschen) nutzen nur Tests. Fällt er weg, verlieren `MatchRepository.deleteBySeasonId` und `ScheduleLockRepository.countBySeasonId` ihren einzigen Produktivaufrufer. Die Tests, die diese Methoden als Aufräumhilfe nutzen (`TournamentTestFixtures`, `EloSnapshotRepositoryTest`, `MatchRepositoryTest`), gehen dann über JPA. ## Repository- und Service-Methoden - `MatchRepository.countBySeasonId`: nur `MatchRepositoryTest`. Der Test zählt stattdessen über die Datenbank. - `HalbseriePublicationService.isPublished(seasonId, halbserie)`: nur `HalbseriePublicationTest` und `ScheduleLockServiceTest`. Die Tests lesen die `SeasonHalbserie`-Zeile. - `SeasonHalbserieService.halbserieOf(seasonId, date)`: nur `SeasonHalbserieServiceTest`. Wird mit seinen Testfällen gelöscht. Nicht zu verwechseln mit `ScheduleLockService.halbserieOf(RoundKind)`, das lebt. - `SeasonSetupService.ensureCategories`: nur `SeasonSetupServiceTest` (zwei Fälle). Wird mit ihnen gelöscht. ## Frontend - Homepage `cup-view.ts`: `positionState` und der Typ `CupPositionState` liest nur `cup-view.test.ts`. Löschen, samt Testblock. - Portal `allowed-period.ts`: `allowedPeriodSentence` liest nur `allowed-period.test.ts`. Löschen, samt Testblock. Dazu: `swissDate` dupliziert `longDate` aus `season-phase.ts` und wird dadurch ersetzt. ## Nicht hier `VenueRepository.findValidAt` ist ebenfalls ohne Produktivaufrufer. Es hängt aber an einem Fehler in der Spiellokal-Auswahl (#119) und bleibt, bis der entschieden ist. ## Abnahme - `mvn -B clean verify` und generate grün; Builds von homepage, portal und content grün; E2E grün. - `metrics.py checks` meldet die Stellen unter quality/2 nicht mehr.
Sign in to join this conversation.
No description provided.