test(backend): Kotest-Assertions statt JUnit, CLAUDE.md berichtigt
backend/CLAUDE.md sah Kotest-Assertions vor, der Code benutzte aber die JUnit-Assertions. Umgestellt bei 25 Aufrufen in zwei Dateien - jetzt billig, und Test-Abhaengigkeiten sind unkritisch, weil sie in keinem Artefakt landen. Wo Kotest spezifischer ist, ersetzt es die handgeschriebenen Meldungen: shouldContain statt assertTrue(contains, "..."), withClue nur noch dort, wo der Kontext wirklich hilft. Gegenprobe per Mutation: eine falsche Erwartung im Service-Test und eine im BDD-Schritt lassen genau die danach benannten Tests fallen. CLAUDE.md berichtigt: Das Backend ist nicht mehr "noch nicht bootstrapped", die Konfiguration heisst application.yaml, die Schichten entsprechen dem tatsaechlichen Aufbau, und die drei Spring-Boot-4-Fallen von heute sind festgehalten, damit sie niemanden erneut treffen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f3afc8dfa8
commit
b6509ae537
+33
-8
@@ -1,17 +1,42 @@
|
||||
# Werkbaum · Backend
|
||||
|
||||
Kotlin/Spring-Boot-Anwendung. Aufgaben: Persistenz der Notationstexte,
|
||||
Taiga-Integration (REST-API, `#ref`-Auflösung, Status-Sync), später
|
||||
Tenzu-Adapter. Noch nicht bootstrapped — siehe README.md hier.
|
||||
Live-Editing (D76), Taiga-Integration (REST-API, `#ref`-Auflösung,
|
||||
Status-Sync), später Tenzu-Adapter.
|
||||
|
||||
**Stand:** Gerüst steht — Dokumenten-CRUD mit Historie und Wiederherstellung,
|
||||
API-First aus `src/main/resources/openapi/api.yaml`, H2 mit Liquibase.
|
||||
Kommandos in README.md hier. Live-Editing ist entschieden (D76), aber noch
|
||||
nicht gebaut: `docs/live-editing-proposal.md`.
|
||||
|
||||
## Konventionen
|
||||
- Kotlin, Spring Boot, Gradle (Kotlin DSL), JDK 21.
|
||||
- Paketwurzel `de.werkbaum`; Schichten: `api` (Controller/DTOs),
|
||||
`domain`, `integration.taiga` (Client, Mapping), `persistence`.
|
||||
- Tests mit JUnit 5 + Kotest-Assertions; Taiga-Client gegen
|
||||
aufgezeichnete Antworten (WireMock), nie gegen Live-Instanzen.
|
||||
- Konfiguration über `application.yml` + Umgebungsvariablen;
|
||||
- Kotlin, **Spring Boot 4**, Gradle (Kotlin DSL), JDK 21.
|
||||
- Paketwurzel `de.werkbaum`; Schichten: `api` (Controller), `domain`,
|
||||
`service`, `repository` (Interfaces), `persistence` (JPA), später
|
||||
`integration.taiga` (Client, Mapping).
|
||||
- **API First:** Interfaces und Modelle werden aus der OpenAPI-Spezifikation
|
||||
generiert; der Controller implementiert sie. Ändert sich die Spec, schlägt
|
||||
der Compile fehl — genau so ist es gewollt.
|
||||
- Tests mit JUnit 5 als Runner + **Kotest-Assertions** (`shouldBe`,
|
||||
`shouldContain`, `shouldThrow`) und MockK; Verhalten per Cucumber gegen die
|
||||
laufende Anwendung (`RestTestClient`, nicht TestRestTemplate — das ist in
|
||||
Boot 4 Auslaufmodell). Taiga-Client gegen aufgezeichnete Antworten
|
||||
(WireMock), nie gegen Live-Instanzen.
|
||||
- Konfiguration über `application.yaml` + Umgebungsvariablen;
|
||||
keine Zugangsdaten im Repository.
|
||||
- Keine neuen **Laufzeit**-Abhängigkeiten ohne Rückfrage (Wurzel-CLAUDE.md);
|
||||
Test-Abhängigkeiten sind unkritisch, sie landen in keinem Artefakt.
|
||||
|
||||
## Spring Boot 4 — drei Fallen (D13-Nachtrag)
|
||||
Vieles ist aus dem Kern in eigene Module gewandert. Was uns getroffen hat:
|
||||
|
||||
- `spring-boot-starter-test` bringt **kein** `TestRestTemplate`/`RestTestClient`
|
||||
mit — dafür `spring-boot-resttestclient`.
|
||||
- `@SpringBootTest` stellt die Test-Client-Bean **nicht** mehr von selbst
|
||||
bereit: `@AutoConfigureRestTestClient` gehört an die Testkonfiguration.
|
||||
- `org.liquibase:liquibase-core` allein bringt die Autokonfiguration nicht
|
||||
mehr mit; ohne `spring-boot-starter-liquibase` läuft keine Migration, und
|
||||
der Fehler zeigt sich erst spät als „Schema validation: missing table".
|
||||
|
||||
## Wichtig (D14 — Parser-Hoheit)
|
||||
Das Backend parst die Notation **nicht**. Es speichert den Text als Ganzes
|
||||
|
||||
Reference in New Issue
Block a user