Commit Graph

2 Commits

Author SHA1 Message Date
Matthieu dfd6e5251d fix(tests) : fiabilise la suite PHPUnit contre la derive d'horloge (ERP-98)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 3m39s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m15s
La suite echouait de facon intermittente (~1 run sur 2), faisant planter le
hook pre-commit. Cause racine unique : l'horloge CLOCK_REALTIME du conteneur
n'est pas monotone sous WSL2/Docker (saut arriere sous charge), alors que le
code et les tests supposaient une horloge stable.

- JWT « Invalid JWT Token » (401) : lexik validait iat/nbf/exp avec
  clock_skew=0 (LooseValidAt PT0S). Un recul d'horloge apres /login_check
  rendait le token « dans le futur ». Ajout de clock_skew: 15 (benefice prod
  aussi si les noeuds derivent).

- Horodatages « meme seconde » : colonnes TIMESTAMP(0) + sleep(1) reel.
  L'ecart floor-seconde n'etait nul que si l'horloge reculait. Le subscriber
  injecte desormais ClockInterface (comportement prod inchange via NativeClock)
  et les tests pilotent un MockClock fige/avance (ClockSensitiveTrait), sans
  sleep reel -> deterministe et plus rapide. Le mock est seede dans le fuseau
  PHP par defaut pour eviter le decalage UTC <-> Europe/Paris au round-trip
  des colonnes TIMESTAMP WITHOUT TIME ZONE.

make test : 464 tests verts ; test timestamp 5/5 deterministe.
2026-06-02 17:35:12 +02:00
matthieu 6efe7aa8ea [ERP-52] Créer le pattern Timestampable + Blamable Shared (#13)
Auto Tag Develop / tag (push) Successful in 9s
## Contexte
Ticket Lesstime : [#52](https://project.malio-dev.fr/projects/6/tasks/463)
Position dans le groupe M0 : 0.0 (prérequis transverse)

## Implémentation
- 2 interfaces (`TimestampableInterface`, `BlamableInterface`) dans `Shared/Domain/Contract/`
- 1 trait (`TimestampableBlamableTrait`) dans `Shared/Domain/Trait/`
- 1 Subscriber Doctrine (`TimestampableBlamableSubscriber`) dans `Shared/Infrastructure/Doctrine/`
- 1 ligne `resolve_target_entities` ajoutée à `config/packages/doctrine.yaml` (`UserInterface` → `User`)
- 1 test architecture (`EntitiesAreTimestampableBlamableTest`) garde-fou L3 de la spec § 2.8.bis
- 1 test unitaire (`TimestampableBlamableSubscriberTest`) 4 cas

## Décision EXCLUDED (cf. réponse review)
Les 4 entités préexistantes (`User`, `Role`, `Permission`, `Site`) sont **whitelistées** dans `EXCLUDED` avec justification par entrée, plutôt que rétrofitées dans ce ticket. Le rétrofit de `User` et `Site` est documenté en **HP-9 / HP-10** (récursion Blamable + migration → décision archi scopée). Doc mise à jour : spec § 2.8.bis, § 9, et `.claude/rules/backend.md`.

## Tests
- PHPUnit : 5 nouveaux tests, 0 échec, 0 risky (248 tests / 874 assertions au total)
- php-cs-fixer : OK

## Reviewer suggéré
- Tristan

---------

Co-authored-by: Matthieu <mtholot19@gmail.com>
Reviewed-on: #13
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
2026-05-28 09:37:18 +00:00