Refatoring : Working state
This commit is contained in:
@@ -37,10 +37,10 @@ Les tests sont dans `tests/`, organisés en miroir de `src/`.
|
||||
|
||||
| Fichier | Classe testée | Ce qui est vérifié |
|
||||
|--------------------------------|---------------------------|---------------------|
|
||||
| `AuthServiceTest` | `AuthApplicationService` | `authenticate()`, `changePassword()`, `login/logout/isLoggedIn()` |
|
||||
| `AuthServiceRateLimitTest` | `AuthApplicationService` | `checkRateLimit()` (IP libre, verrouillée, expirée, minimum 1 minute, `deleteExpired()`), `recordFailure()` (constantes MAX_ATTEMPTS/LOCK_MINUTES), `resetRateLimit()` |
|
||||
| `LoginAttemptRepositoryTest` | `PdoLoginAttemptRepository` | `findByIp()`, `recordFailure()` (INSERT vs UPDATE, compteur, seuil exact, fenêtre temporelle), `resetForIp()`, `deleteExpired()` |
|
||||
| `PasswordResetServiceTest` | `PasswordResetApplicationService` | `requestReset()` (email inconnu silencieux, invalidation, création, envoi, URL), `validateToken()` (inexistant, expiré, valide), `resetPassword()` (token invalide, mdp trop court via `WeakPasswordException`, mise à jour + consommation) |
|
||||
| `AuthServiceTest` | `AuthApplicationService` | `createUser()` (normalisation, unicité via exceptions métier, longueur mdp), `authenticate()`, `changePassword()`, `login/logout/isLoggedIn()` |
|
||||
| `AuthServiceRateLimitTest` | `AuthApplicationService` | `checkRateLimit()` (IP libre, verrouillée, expirée, minimum 1 minute, `deleteExpired()`), `recordFailure()` (constantes MAX_ATTEMPTS/LOCK_MINUTES), `resetRateLimit()` |
|
||||
| `LoginAttemptRepositoryTest` | `PdoLoginAttemptRepository` | `findByIp()`, `recordFailure()` (INSERT vs UPDATE, compteur, seuil exact, fenêtre temporelle), `resetForIp()`, `deleteExpired()` |
|
||||
| `PasswordResetServiceTest` | `PasswordResetApplicationService` | `requestReset()` (email inconnu silencieux, invalidation, création, envoi, URL), `validateToken()` (inexistant, expiré, valide), `resetPassword()` (token invalide, mdp trop court via `WeakPasswordException`, mise à jour + consommation) |
|
||||
| `PasswordResetRepositoryTest` | `PdoPasswordResetRepository` | `create()`, `findActiveByHash()` (filtre `used_at = null`), `invalidateByUserId()` et `markAsUsed()` (jamais de `delete`) |
|
||||
|
||||
### `tests/User/`
|
||||
@@ -73,7 +73,8 @@ $repo = $this->createMock(UserRepositoryInterface::class);
|
||||
$repo = $this->createMock(UserRepository::class);
|
||||
```
|
||||
|
||||
Les tests de repositories (`UserRepositoryTest`, etc.) testent l'implémentation concrète avec un mock PDO — c'est intentionnel.
|
||||
Les tests de repositories (`PdoUserRepository`, etc.) testent l'implémentation concrète avec un mock PDO — c'est intentionnel.
|
||||
Ils doivent vérifier l'intention générale des requêtes et les valeurs retournées, sans figer inutilement chaque détail interne (noms exacts de placeholders, méthode PDO précise utilisée quand cela n'apporte rien, etc.).
|
||||
|
||||
### Exceptions métier
|
||||
|
||||
|
||||
Reference in New Issue
Block a user