Files
Olhar-API/.claude/rules/tests.md
T
Gato 12a28af1ca
CI — Tests & Docker Build / Tests (push) Failing after 4s
CI — Tests & Docker Build / Build & push image Docker (push) Has been skipped
feat(auth): POST /auth/login retourne email, name, role et token
- Champ `name` ajouté sur User, UserEntity, RegisterRequest
- AuthenticateUserUseCase retourne Result(user, token) au lieu du token seul
- UserNotFoundException remplacé par BadCredentialsException au login (pas de fuite d'info)
- @Email retiré de LoginRequest (identifiant = "gato", pas nécessairement un email)
- Migration V2 : colonne name + utilisateur par défaut gato/change (ADMIN)
- bytecode cible Java 21 (ASM Spring Boot 3.4 ne supporte pas Java 25)
- Tests : AbstractIntegrationTest simplifié, URL TC JDBC + network host

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 08:24:41 +02:00

71 lines
2.1 KiB
Markdown

# Tests — Olhar-API
## Couverture minimale : 90%
La couverture (lignes, branches, méthodes) doit être **≥ 90%** en permanence, vérifiée via JaCoCo.
Le seuil global est défini dans les règles workspace (`tests.md`).
## Types de tests
| Type | Outil | Suffixe de classe |
|------|-------|-------------------|
| Unitaire | JUnit 5 | `*Test` |
| Intégration | JUnit 5 + Testcontainers + PostgreSQL | `*IT` |
Les tests d'intégration étendent `AbstractIntegrationTest` qui démarre un conteneur PostgreSQL via Testcontainers.
## Structure attendue
Pour chaque classe de production, une classe de test correspondante :
- `JwtService``JwtServiceTest` (unitaire, pas de Spring context)
- `AuthController``AuthControllerIT` (intégration, `@SpringBootTest`)
- `UserRepositoryAdapter` → test d'intégration avec BDD réelle
## Exécution via Podman (obligatoire)
Voir `java-env.md` (règles workspace) pour les contraintes. Commande standard :
```bash
podman run --rm -v $(pwd):/workspace:Z -w /workspace eclipse-temurin:25-jdk ./gradlew test --no-daemon
```
Testcontainers nécessite le socket Podman et le réseau hôte (DinD) :
```bash
podman run --rm \
--privileged \
--network host \
-v $(pwd):/workspace:Z \
-v /run/user/$(id -u)/podman/podman.sock:/var/run/docker.sock:Z \
-e DOCKER_HOST=unix:///var/run/docker.sock \
-e TESTCONTAINERS_RYUK_DISABLED=true \
-w /workspace \
eclipse-temurin:25-jdk \
./gradlew test --no-daemon
```
- `--network host` est obligatoire : le TC JDBC driver démarre PostgreSQL via le socket Podman et s'y connecte via `localhost:PORT` — sans host network, ce port n'est pas accessible depuis l'intérieur du container.
- `TESTCONTAINERS_RYUK_DISABLED=true` : Ryuk (le garbage collector de Testcontainers) ne fonctionne pas en DinD.
## JaCoCo dans build.gradle
```groovy
test {
useJUnitPlatform()
finalizedBy jacocoTestReport
}
jacocoTestReport {
reports { xml.required = true }
dependsOn test
}
jacocoTestCoverageVerification {
violationRules {
rule {
limit { minimum = 0.90 }
}
}
}
```