Story AB-001 : Environnement de développement + Infrastructure de test¶
Module : absence-management Slice : VS-AB-001 from architecture Brand context : [BOTH] Papillon HR Suite + ALTARYS ENTERPRISE HR Suite Priority : 1 Depends on : Aucune Can develop concurrently with : Aucune (doit être livrée en premier) Merge order : Avant AB-002 Estimated complexity : S PRD User Stories : N/A - Technical Story
Objectif¶
Mettre en place l'environnement de développement et l'infrastructure de test pour le module Absence Management afin que toutes les stories suivantes disposent d'un Docker Compose fonctionnel, d'une configuration TestContainers et de fixtures de test. C'est un prérequis pour toutes les autres stories AB — aucune logique métier ne peut être développée ou testée sans cette fondation.
Périmètre Backend¶
Entités & Records¶
Aucune entité métier dans ce slice. Il s'agit uniquement d'infrastructure de test.
Classes de support de test à créer :
AbsenceTestContainersConfiguration.java— Configuration TestContainers partagée pour le module absence. Démarre les containers PostgreSQL + Redis. Configure les propriétés Spring DataSource pour le contexte de test.AbsenceTestFixtures.java— Méthodes factory pour les données d'exemple :createSampleLeaveRequest()— retourne unLeaveRequestvalide avec des valeurs par défaut réalistescreateSampleEmployeeProfile()— retourne unLeaveEmployeeProfilevalide avec des soldes à zérocreateSampleLedgerEntry()— retourne une entrée d'accumulationLeaveBalanceLedgervalideTestLeaveRequestFixture.java— Fixture avec pattern Builder et API fluide pourLeaveRequest, permettant de surcharger les valeurs par défaut (tenant, employé, dates, statut, type de congé)
Couche Repository¶
N/A — Aucun repository dans ce slice. Les repositories sont créés dans AB-002.
Couche Service¶
N/A — Aucun service dans ce slice.
Endpoints API¶
N/A — Aucun endpoint dans ce slice.
Règles de validation¶
- Les fixtures de test doivent produire des entités qui passent toutes les règles de validation définies dans AB-002
- BigDecimal pour tous les champs montant/jour dans les fixtures (jamais float/double)
- Tous les champs date utilisent
LocalDate, tous les champs timestamp utilisentInstant tenant_iddoit être non-null dans toutes les fixtures générées
Considérations multi-tenant¶
- Les fixtures de test doivent accepter
tenantIden paramètre pour supporter les 4 profils DB (shared, schema-per-tenant, DB-per-tenant, BYO-DB) AbsenceTestContainersConfigurationutilise le profil shared par défaut pour simplifier- Les méthodes de fixture doivent générer des valeurs
tenant_iduniques par test pour éviter la contamination inter-tests - Docker Compose doit supporter les surcharges spécifiques au profil via des variables d'environnement
Périmètre Frontend¶
N/A — Story d'infrastructure backend.
Pages & Routes¶
N/A
Composants¶
N/A
États UI (TOUS REQUIS)¶
N/A — Backend uniquement.
Comportement responsive¶
N/A
Interactions¶
N/A
Critères d'acceptation¶
AC-001: Docker Compose starts all dependencies
Given the developer runs docker-compose up -d
When the services start
Then PostgreSQL and Redis are accessible on their default ports
AC-002: TestContainers integration works
Given a test class extends AbsenceTestContainersConfiguration
When the test runs
Then a PostgreSQL container is automatically started and connected
AC-003: Test fixtures generate valid data
Given the AbsenceTestFixtures class is available
When a test calls createSampleLeaveRequest()
Then a valid LeaveRequest is created with all required fields populated and BigDecimal amounts
Règles OHADA & réglementaires¶
N/A — Story d'infrastructure sans logique métier.
Standards & conventions¶
docs/standards/java-spring-guidelines.md— §Testing, §TestContainers setup, §Records & sealed typesdocs/standards/database-guidelines.md— §Multi-tenant repository pattern, §Connection poolingdocs/standards/multi-datasource-patterns.md— §TestContainers multi-datasource configuration
Exigences de test¶
Tests unitaires¶
AbsenceTestFixtures.createSampleLeaveRequest()retourne une entité avec tous les champs requis non-nullAbsenceTestFixtures.createSampleEmployeeProfile()retourne une entité avecannual_balance_ouvrables = BigDecimal.ZERO- Le builder
TestLeaveRequestFixturesurcharge correctement les valeurs par défaut
Tests d'intégration¶
- Les containers PostgreSQL + Redis de Docker Compose démarrent et acceptent les connexions
AbsenceTestContainersConfigurationinjecte uneDataSourcefonctionnelle dans le contexte de test- Les entités de fixture peuvent être persistées et récupérées (validé après l'existence des migrations AB-002)
Ce que la QA validera¶
- N/A — Pas de fonctionnalité visible par l'utilisateur. Le développeur auto-valide que l'infrastructure de test fonctionne.
Hors périmètre¶
- Logique métier, services ou endpoints API
- Migrations Flyway et schéma de base de données (AB-002)
- Configuration frontend de quelque nature que ce soit
- Configuration de test Keycloak ou authentification (utilise l'infrastructure de test existante de la plateforme)
- Logique de cache Redis (le container Redis est démarré pour usage futur)
Définition de Done¶
- [ ] Tous les endpoints backend implémentés et retournant les réponses correctes — N/A (pas d'endpoints)
- [ ] Toutes les pages frontend s'affichent correctement à 360px, 768px, 1024px — N/A (backend uniquement)
- [ ] Les 5 états UI implémentés (loading, empty, error, offline, success) — N/A
- [ ] Le micro-copy français correspond exactement à la spec de design — N/A
- [ ] Tous les critères d'acceptation passent manuellement
- [ ] Tests unitaires écrits et passants
- [ ] Tests d'intégration écrits et passants
- [ ] Isolation multi-tenant vérifiée — Les fixtures de test supportent la paramétrisation du tenant_id
- [ ] L'écriture + synchronisation offline fonctionne (Papillon) / N/A (Enterprise) — N/A (backend uniquement)
- [ ] Pas de TypeScript
any— N/A - [ ] Pas de Java raw types — tous les generics explicites
- [ ] Les réponses API suivent le format d'enveloppe standard — N/A (pas d'endpoints)
- [ ] Entrées de piste d'audit pour chaque mutation de données — N/A (pas de mutation de données)