Apparence
Couverture automatisée
Ce que les suites de tests vérifient à chaque construction. Ce qui est ici n'a pas besoin d'être rejoué à la main : c'est le seul usage de ce document.
Il est généré depuis les suites elles-mêmes, jamais tenu à jour à la main : un test supprimé disparaît d'ici à la génération suivante, et ne peut donc pas continuer à rassurer.
Interface — Playwright
Les scénarios end-to-end, joués sur le bundle de production dans un navigateur.
Ce qu'ils ne prouvent pas : ils tournent sans backend. Les appels d'API sont interceptés et remplacés par des réponses figées. Ils démontrent donc que l'interface se comporte correctement face aux données et aux droits que l'API lui annonce — pas que l'API les produit ni qu'elle les applique. Cette seconde moitié est couverte par pytest, plus bas, et reste à vérifier de bout en bout à la main sur les parcours sensibles.
Les scénarios dont le titre commence par « mobile » sont joués en 390 × 844 ; les autres en largeur bureau.
e2e/absences-queue.spec.ts
Recette manuelle : Absences.
| Groupe | Ce qui est vérifié |
|---|---|
| absences — file des demandes | ouvre sur les demandes à valider de l’année entière |
| absences — file des demandes | nomme le salarié, sa fonction, son équipe et le décompte du serveur |
| absences — file des demandes | nomme encore le motif d’une demande dont le motif a quitté le catalogue |
| absences — file des demandes | le filtre établissement restreint la liste |
| absences — file des demandes | le filtre équipe garde les lignes de l’une de ses équipes |
| absences — file des demandes | les menus ne proposent que le périmètre, et suivent l’établissement choisi |
| absences — file des demandes | la recherche salarié suggère des noms et restreint à celui choisi |
| absences — file des demandes | choisir un mois envoie sa fenêtre dans la requête |
| absences — file des demandes | un mois sans demande dit lequel des trois états était demandé |
| absences — file des demandes | pagine la file au-delà de dix demandes |
| absences — file des demandes | changer d’état redemande la file dans cet état |
| absences — file des demandes | mobile : la file défile au lieu de déborder de la page |
| demandes — les modifications de journée dans la file | nomme l’écran « Demandes » et liste les modifications parmi les absences |
| demandes — les modifications de journée dans la file | le filtre de type garde une seule sorte de demande |
| demandes — les modifications de journée dans la file | les filtres du salarié s’appliquent aussi aux modifications |
| demandes — les modifications de journée dans la file | une modification tranchée se lit sous son état |
| demandes — les modifications de journée dans la file | les annulations ne listent que des absences, le filtre de type figé |
| demandes — les modifications de journée dans la file | une modification hors du périmètre n’est pas listée |
| demandes — les modifications de journée dans la file | une lecture des modifications qui échoue le dit et garde les absences |
| demandes — les modifications de journée dans la file | mobile : le filtre de type tient dans la page |
| demandes — arbitrer une modification de journée | le panneau compare la journée actuelle à la demande — bureau |
| demandes — arbitrer une modification de journée | le panneau compare la journée actuelle à la demande — mobile |
| demandes — arbitrer une modification de journée | « Voir au planning › » rouvre la modification dans sa semaine |
| demandes — arbitrer une modification de journée | valider envoie la version lue et sort la ligne de la file |
| demandes — arbitrer une modification de journée | « Ajuster » valide la journée remaniée, avec son motif — bureau |
| demandes — arbitrer une modification de journée | « Ajuster » valide la journée remaniée, avec son motif — mobile |
| demandes — arbitrer une modification de journée | « Ajuster » une demande sans créneau part de la journée actuelle |
| demandes — arbitrer une modification de journée | un refus armé puis abandonné laisse valider la demande telle quelle |
| demandes — arbitrer une modification de journée | « Annuler l’ajustement » revient à la demande telle quelle |
| demandes — arbitrer une modification de journée | un créneau ajouté à l’ajustement garde les options de la demande |
| demandes — arbitrer une modification de journée | « Ajuster » sur une journée sans créneau s’ouvre sur une carte vierge |
| demandes — arbitrer une modification de journée | une demande corrigée au back-office exige un motif pour être validée |
| demandes — arbitrer une modification de journée | les avertissements de prévenance de l’accord sont dits |
| demandes — arbitrer une modification de journée | refuser exige un motif, puis l’envoie |
| demandes — arbitrer une modification de journée | une absence accordée ce jour-là est signalée avant de trancher |
| demandes — arbitrer une modification de journée | une demande déjà tranchée ailleurs répond 409 et retire boutons et motif |
| demandes — arbitrer une modification de journée | une modification tranchée se lit sans pied |
| demandes — arbitrer une modification de journée | sans le droit de trancher, le panneau n’a pas de pied |
| demandes — arbitrer une modification de journée | sa propre demande se lit sans pied |
| absences — lien vers le planning | chaque demande en attente porte sa semaine, son salarié et sa demande |
| absences — lien vers le planning | une demande tranchée n’a plus de lien |
| absences — lien vers le planning | APAJH-273 — une annulation à arbitrer porte aussi sa semaine |
| absences — lien vers le planning | suivre le lien mène au planning, la demande ouverte |
| absences — lien vers le planning | Entrée sur le lien navigue au lieu d’arbitrer sur place |
| absences — lien vers le planning | un clic modifié n’ouvre pas le panneau d’arbitrage |
| absences — lien vers le planning | mobile : le lien reste atteignable |
| absences — arbitrer une demande | APAJH-273 — le panneau d’une annulation montre le congé qu’elle rendrait — bureau |
| absences — arbitrer une demande | APAJH-273 — le panneau d’une annulation montre le congé qu’elle rendrait — mobile |
| absences — arbitrer une demande | une annulation demandée s’arbitre sans ajustement, et s’accorde |
| absences — arbitrer une demande | refuser une annulation exige un motif et l’envoie |
| absences — arbitrer une demande | ouvre le panneau sur la demande cliquée |
| absences — arbitrer une demande | dit ce que la journée devait être avant la demande |
| absences — arbitrer une demande | une lecture du prévu qui échoue le dit au lieu de se taire |
| absences — arbitrer une demande | chiffre l’effet compteur et n’affiche que les avertissements |
| absences — arbitrer une demande | valider envoie la version lue et sort la ligne de la file |
| absences — arbitrer une demande | refuser demande d’abord un motif, et refuse le vide |
| absences — arbitrer une demande | refuser avec un motif l’envoie et sort la ligne de la file |
| absences — arbitrer une demande | ajuster requalifie la demande, la rechiffre et exige un motif |
| absences — arbitrer une demande | APAJH-302 — requalifier une demi-journée en congé l’accorde en journée entière — bureau |
| absences — arbitrer une demande | APAJH-302 — requalifier une demi-journée en congé l’accorde en journée entière — mobile |
| absences — arbitrer une demande | valider sans rien changer dans le volet n’envoie aucun ajustement |
| absences — arbitrer une demande | module le poste du jour en accordant une absence en heures |
| absences — arbitrer une demande | APAJH-291 — refaçonné jusqu’à 15:30, le poste vaut 6h net |
| absences — arbitrer une demande | APAJH-291 — refaçonné jusqu’à 12:00, le poste vaut 3h30 net |
| absences — arbitrer une demande | APAJH-291 — refaçonner une journée coupée garde son autre créneau |
| absences — arbitrer une demande | APAJH-291 — « Ajuster » refaçonne le créneau que l’absence recoupe — bureau |
| absences — arbitrer une demande | APAJH-291 — « Ajuster » refaçonne le créneau que l’absence recoupe — mobile |
| absences — arbitrer une demande | mobile : le panneau s’ouvre et porte ses deux commandes |
| absences — ce que l’arbitrage refuse | sans le droit de trancher, le panneau n’a pas de pied |
| absences — ce que l’arbitrage refuse | sa propre demande se lit sans pied ni ajustement |
| absences — ce que l’arbitrage refuse | une demande déjà tranchée ailleurs répond 409 et recharge la file |
| absences — qui peut lire la file | un salarié saisissant /demandes est renvoyé sur le portail |
| absences — qui peut lire la file | sans le droit de lire la file, l’entrée de menu n’est pas offerte |
e2e/absences.spec.ts
Recette manuelle : Absences.
| Groupe | Ce qui est vérifié |
|---|---|
| — | consultation protégée d’un justificatif d’absence |
| — | consultation protégée d’un justificatif d’absence sur mobile |
| déclaration d’absence | le panneau du poste ouvre le wizard sur l’étape « Type » |
| déclaration d’absence | l’étape « Type » descend catégorie, sous-catégorie puis motif |
| déclaration d’absence | le bloc « Compteurs du salarié » se déplie sur les compteurs réels |
| déclaration d’absence | un salarié à six compteurs les fait tous défiler dans le bloc |
| déclaration d’absence | les soldes s’affichent en regard des motifs, et rien à défaut |
| déclaration d’absence | une catégorie sans sous-catégorie mène droit aux motifs |
| déclaration d’absence | l’étape « Détails » saisit une plage, une demi-journée et un commentaire |
| déclaration d’absence | le calendrier colore le mois qu’il montre, et pas seulement celui de la case |
| déclaration d’absence | un motif en heures se saisit sur un jour et deux heures |
| déclaration d’absence | le récapitulatif reprend la saisie et affiche l’avertissement |
| déclaration d’absence | le récapitulatif annonce l’effet compteur de l’enregistrement |
| déclaration d’absence | une règle bloquante rendue par la prévisualisation retient l’enregistrement |
| déclaration d’absence | « Enregistrer » écrit la déclaration, confirme et referme le panneau |
| déclaration d’absence | « Retour » ne perd pas ce qui a été saisi |
| déclaration d’absence | mobile : le parcours complet tient dans le panneau |
| correction d’une absence déclarée | « Modifier l’absence » rouvre le parcours sur la déclaration servie |
| correction d’une absence déclarée | « Enregistrer » corrige la ligne au lieu d’en écrire une seconde |
| correction d’une absence déclarée | le formulaire de correction n’offre pas la suppression |
| correction d’une absence déclarée | « Supprimer l’absence » se commande depuis le détail, avec confirmation |
| correction d’une absence déclarée | une absence aux demi-journées différentes ne s’ouvre pas dans le formulaire |
| correction d’une absence déclarée | mobile : la confirmation de suppression tient dans le panneau |
| justificatifs d’une absence | le dépôt n’est offert que par les motifs qui attendent un justificatif |
| justificatifs d’une absence | « Validation requise » s’affiche sans entraîner de champ de dépôt |
| justificatifs d’une absence | « Enregistrer » dépose les justificatifs en multipart, une clé par fichier |
| justificatifs d’une absence | un justificatif se glisse-dépose sur la zone |
| justificatifs d’une absence | les justificatifs déjà déposés se relisent et se détachent |
| justificatifs d’une absence | un justificatif servi sans URL s’affiche sans lien mort |
| justificatifs d’une absence | mobile : la zone de dépôt tient dans le panneau |
e2e/annualisation.spec.ts
Recette manuelle : Annualisation.
| Groupe | Ce qui est vérifié |
|---|---|
| — | Annualisation — trame et modification future manager |
| — | Annualisation — trame et modification future salarié |
| — | APAJH-269 — la grille est masquée sur téléphone manager |
| — | APAJH-269 — la grille est masquée sur téléphone salarié |
| — | APAJH-61/81 — détail du contrat et réserve manager desktop |
| — | APAJH-61/81 — détail du contrat et réserve manager mobile |
| — | APAJH-61/81 — détail du contrat et réserve salarié desktop |
| — | APAJH-61/81 — détail du contrat et réserve salarié mobile |
| — | APAJH-61/81 — bandeau salarié et année compacte à 390 px |
| — | APAJH-61/81 — bandeau salarié et année compacte à 1440 px |
| — | APAJH-61/81 — grille compacte de la maquette à 1440 px |
| — | APAJH-61/81 — grille compacte de la maquette à 1920 px |
| — | APAJH-61/81 — nouvel entrant sans droits utilisables desktop |
| — | APAJH-61/81 — nouvel entrant sans droits utilisables mobile |
| — | APAJH-61/81 — recherche et filtres lisibles à 390 px |
| — | APAJH-61/81 — recherche et filtres lisibles à 1024 px |
| — | APAJH-61/81 — recherche et filtres lisibles à 1920 px |
| — | APAJH-61/81 — récapitulatif mensuel repliable et zéros lisibles |
| — | APAJH-61/81 — repère les week-ends et les fériés |
| — | APAJH-61/81 — une absence conserve le réalisé dans la case et son motif au survol |
| — | APAJH-61/81 — liste, relevé et fraîcheur desktop |
| — | APAJH-61/81 — liste, relevé et fraîcheur mobile |
| — | APAJH-61/81 — le salarié ouvre uniquement son relevé personnel |
| — | APAJH-61/81 — un seuil absent est signalé sans afficher zéro |
| — | APAJH-61/81 — un retour au premier plan relit le relevé encore frais |
| — | APAJH-61/81 — état not_applicable sur mobile |
| — | APAJH-61/81 — état missing_holiday_calendar sur mobile |
| — | APAJH-61/81 — changer d’année après une erreur de chargement |
| — | APAJH-61/81 — dossier absent et erreur de lecture sont distincts |
| — | APAJH-298 — le filtre établissement se limite au périmètre |
| — | APAJH-298 — le filtre établissement se limite au périmètre (mobile) |
e2e/astreintes.spec.ts
Recette manuelle : Astreintes.
| Groupe | Ce qui est vérifié |
|---|---|
| — | la navigation bureau ouvre Astreinte et un salarié ne peut pas ouvrir la route |
| — | le menu mobile conserve l’accès aux astreintes du manager |
| — | le panneau utilise toute la largeur d’un petit téléphone sans couper les champs |
| Astreintes — bureau | consulte les salariés sans doublon et transmet recherche et filtres |
| Astreintes — bureau | adapte les équipes aux établissements et retire seulement les filtres incompatibles |
| Astreintes — bureau | annuler abandonne la saisie et la dernière période peut être supprimée |
| Astreintes — bureau | enregistre plusieurs lignes ensemble et conserve une saisie refusée |
| Astreintes — bureau | un conflit conserve le formulaire et demande un rechargement explicite |
| Astreintes — bureau | un clic sur le salarié permet de créer puis de corriger et enregistrer une astreinte |
| Astreintes — bureau | attend le serveur avant de confirmer et garde le panneau pendant l’enregistrement |
| Astreintes — bureau | le Service Paie consulte un historique non éligible sans commande d’écriture |
| Astreintes — bureau | présente l’état vide et permet une nouvelle tentative après erreur |
| Astreintes — bureau | enregistre une astreinte posée sur une absence et le signale |
| Astreintes — petit écran | consulte les salariés sans doublon et transmet recherche et filtres |
| Astreintes — petit écran | adapte les équipes aux établissements et retire seulement les filtres incompatibles |
| Astreintes — petit écran | annuler abandonne la saisie et la dernière période peut être supprimée |
| Astreintes — petit écran | enregistre plusieurs lignes ensemble et conserve une saisie refusée |
| Astreintes — petit écran | un conflit conserve le formulaire et demande un rechargement explicite |
| Astreintes — petit écran | un clic sur le salarié permet de créer puis de corriger et enregistrer une astreinte |
| Astreintes — petit écran | attend le serveur avant de confirmer et garde le panneau pendant l’enregistrement |
| Astreintes — petit écran | le Service Paie consulte un historique non éligible sans commande d’écriture |
| Astreintes — petit écran | présente l’état vide et permet une nouvelle tentative après erreur |
| Astreintes — petit écran | enregistre une astreinte posée sur une absence et le signale |
e2e/backoffice-access.spec.ts
Recette manuelle : Portail.
| Groupe | Ce qui est vérifié |
|---|---|
| menu utilisateur — accès au back-office | Admin avec accès staff voit « Accéder au BO » |
| menu utilisateur — accès au back-office | Admin sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | RH n1 avec accès staff voit « Accéder au BO » |
| menu utilisateur — accès au back-office | RH n1 sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | RH n2 avec accès staff voit « Accéder au BO » |
| menu utilisateur — accès au back-office | RH n2 sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | DA sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | DA avec accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Manager n1 sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Manager n1 avec accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Manager n2 sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Manager n2 avec accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Salarié sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Salarié avec accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Intérimaire sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Intérimaire avec accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Service Paie sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Service Paie avec accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Sans rôle sans accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | Sans rôle avec accès staff ne voit pas le lien BO |
| menu utilisateur — accès au back-office | clic : ouvre le BO sur le domaine API dans un nouvel onglet |
| menu utilisateur — accès au back-office | clavier : ouvre le BO sur le domaine API dans un nouvel onglet |
| menu utilisateur — accès au back-office | mobile : le tiroir conserve le raccourci profil sans entrée BO |
e2e/dashboard-alerts.spec.ts
Recette manuelle : Tableau de bord manager.
| Groupe | Ce qui est vérifié |
|---|---|
| — | alertes 1440 px : priorités, filtres combinés et panneau accessible |
| — | alertes 320 px : priorités, filtres combinés et panneau accessible |
| — | une panne des alertes conserve les demandes et permet de réessayer |
| — | le retour du planning actualise les alertes selon la correction refusée |
| — | le retour du planning actualise les alertes selon la correction enregistrée |
e2e/dashboard.spec.ts
Recette manuelle : Tableau de bord manager.
| Groupe | Ce qui est vérifié |
|---|---|
| — | accès direct et rechargement conservent le dashboard et l’identité réelle |
| — | le panneau évènements concorde avec le compteur et mène au bon agenda |
| — | l’astreinte présente sa période complète sans temps théorique — 1440 px |
| — | l’astreinte présente sa période complète sans temps théorique — 320 px |
| — | les filtres se combinent, les catégories absentes ne simulent pas de résultat |
| — | un dossier sans matricule ouvre sa fiche et n’est pas présenté comme un import échoué |
| — | les sources vides et l’absence d’historique sont explicites |
| — | le chargement et une panne restent isolés et peuvent être relancés |
| — | une source à traiter en panne laisse les autres dossiers consultables |
| — | le compteur et la liste sont actualisés seulement après une décision réussie |
| — | un refus conserve le motif après erreur puis retire la demande |
| — | une décision concurrente recharge l’état et ne propose pas une seconde décision |
| — | APAJH-273 — une annulation demandée est à traiter et s’arbitre d’ici — 1440 px |
| — | APAJH-273 — une annulation demandée est à traiter et s’arbitre d’ici — 390 px |
| — | APAJH-323 — une demande de modification est à traiter et se tranche d’ici — 1440 px |
| — | APAJH-323 — une demande de modification est à traiter et se tranche d’ici — 390 px |
| — | les droits de lecture et de décision restent distincts |
| — | un rôle sans accès aux demandes ne voit pas un faux zéro |
| — | un salarié ne peut pas ouvrir le dashboard manager |
| — | mobile 320 px : manager conservé, panneaux et focus utilisables |
| — | mobile 390 px : manager conservé, panneaux et focus utilisables |
| — | présentation 1440 px : liste défilante et menu d’urgence au clavier |
| — | présentation 320 px : liste défilante et menu d’urgence au clavier |
e2e/demande-absence.spec.ts
Recette manuelle : Absences.
| Groupe | Ce qui est vérifié |
|---|---|
| — | un compte sans fiche salarié est renvoyé vers les RH |
| Demander une absence — bureau | le parcours complet envoie la demande et confirme son envoi |
| Demander une absence — bureau | un congé ne propose pas la demi-journée et part en journée entière |
| Demander une absence — bureau | un « Repos plus » se demande sous son code R+, sans solde de compteur |
| Demander une absence — bureau | une demande que personne ne peut traiter part, et le dit |
| Demander une absence — bureau | le solde est celui de l’année de congés que l’absence débite |
| Demander une absence — bureau | une absence sur deux années de congés n’annonce pas de solde après |
| Demander une absence — bureau | l’info-bulle du motif dit ce qu’il implique, au doigt comme à la souris |
| Demander une absence — bureau | un motif en heures demande ses bornes au lieu d’une période |
| Demander une absence — bureau | une alerte non bloquante laisse passer, une bloquante retient |
| Demander une absence — bureau | le justificatif part avec la demande, et le récapitulatif le nomme |
| Demander une absence — bureau | le calendrier s’arrête à J-14, et le refus du serveur s’affiche tel quel |
| Demander une absence — bureau | « Étape précédente » garde la saisie, « Retour » ramène à la liste |
| Demander une absence — mobile | le parcours complet envoie la demande et confirme son envoi |
| Demander une absence — mobile | un congé ne propose pas la demi-journée et part en journée entière |
| Demander une absence — mobile | un « Repos plus » se demande sous son code R+, sans solde de compteur |
| Demander une absence — mobile | une demande que personne ne peut traiter part, et le dit |
| Demander une absence — mobile | le solde est celui de l’année de congés que l’absence débite |
| Demander une absence — mobile | une absence sur deux années de congés n’annonce pas de solde après |
| Demander une absence — mobile | l’info-bulle du motif dit ce qu’il implique, au doigt comme à la souris |
| Demander une absence — mobile | un motif en heures demande ses bornes au lieu d’une période |
| Demander une absence — mobile | une alerte non bloquante laisse passer, une bloquante retient |
| Demander une absence — mobile | le justificatif part avec la demande, et le récapitulatif le nomme |
| Demander une absence — mobile | le calendrier s’arrête à J-14, et le refus du serveur s’affiche tel quel |
| Demander une absence — mobile | « Étape précédente » garde la saisie, « Retour » ramène à la liste |
e2e/demande-modification.spec.ts
Recette manuelle : Demandes de modification.
| Groupe | Ce qui est vérifié |
|---|---|
| — | un compte sans fiche salarié est renvoyé vers les RH |
| Demander une modification — bureau | le parcours complet reprend le poste et la pause, et envoie la demande |
| Demander une modification — bureau | une demande que personne ne peut traiter part, et le dit |
| Demander une modification — bureau | un créneau ajouté porte une pause rémunérée, et ni poste ni établissement |
| Demander une modification — bureau | une option seule part sans créneau : la journée garde ses heures |
| Demander une modification — bureau | une demande qui ne change rien reste grisée, le motif seul ne compte pas |
| Demander une modification — bureau | une journée sans poste s’ouvre sans créneau, et on en ajoute un |
| Demander une modification — bureau | des créneaux aux options différentes : le formulaire prévient qu’elles vaudront pour la journée |
| Demander une modification — bureau | un jour sans poste : une option seule ne s’envoie pas |
| Demander une modification — bureau | des heures passées d’un créneau à un autre ne se lisent pas comme inchangées |
| Demander une modification — bureau | la journée est relue à chaque ouverture, jamais reprise du cache |
| Demander une modification — bureau | le calendrier s’arrête à J-14, et le refus du serveur s’affiche tel quel |
| Demander une modification — mobile | le parcours complet reprend le poste et la pause, et envoie la demande |
| Demander une modification — mobile | une demande que personne ne peut traiter part, et le dit |
| Demander une modification — mobile | un créneau ajouté porte une pause rémunérée, et ni poste ni établissement |
| Demander une modification — mobile | une option seule part sans créneau : la journée garde ses heures |
| Demander une modification — mobile | une demande qui ne change rien reste grisée, le motif seul ne compte pas |
| Demander une modification — mobile | une journée sans poste s’ouvre sans créneau, et on en ajoute un |
| Demander une modification — mobile | des créneaux aux options différentes : le formulaire prévient qu’elles vaudront pour la journée |
| Demander une modification — mobile | un jour sans poste : une option seule ne s’envoie pas |
| Demander une modification — mobile | des heures passées d’un créneau à un autre ne se lisent pas comme inchangées |
| Demander une modification — mobile | la journée est relue à chaque ouverture, jamais reprise du cache |
| Demander une modification — mobile | le calendrier s’arrête à J-14, et le refus du serveur s’affiche tel quel |
e2e/equipes.spec.ts
Recette manuelle : Bibliothèque ▸ Équipes.
| Groupe | Ce qui est vérifié |
|---|---|
| — | la liste des équipes se limite au périmètre |
| — | la liste des équipes se limite au périmètre (mobile) |
| — | la recherche filtre la liste des équipes |
| — | la recherche filtre la liste des équipes (mobile) |
| — | le service paie consulte les équipes sans pouvoir les modifier |
| — | le service paie consulte les équipes sans pouvoir les modifier (mobile) |
| — | un refus de suppression s’affiche dans la confirmation |
| — | un refus de suppression s’affiche dans la confirmation (mobile) |
| — | une équipe transverse ne nomme que les établissements du périmètre |
| — | une équipe transverse ne nomme que les établissements du périmètre (mobile) |
| équipes — sélecteur d’établissement(s) | le pôle groupe les établissements sans planter ni les dupliquer |
| équipes — recherche de salarié bornée aux établissements | la recherche se limite aux établissements cochés |
| équipes — recherche de salarié bornée aux établissements | sans établissement coché, tout le périmètre d’un manager non restreint |
| équipes — périmètre du manager | un manager ne trouve jamais un salarié hors de son périmètre |
| équipes — périmètre du manager (mobile) | un manager ne trouve jamais un salarié hors de son périmètre |
| équipes — établissement obligatoire à l’enregistrement | sans établissement coché, l’équipe prend tous ceux du périmètre |
| équipes — établissement obligatoire à l’enregistrement | un refus du serveur s’affiche à l’écran |
e2e/evenements.spec.ts
Recette manuelle : Évènements et formations.
| Groupe | Ce qui est vérifié |
|---|---|
| — | la vue agenda filtre sans afficher le bandeau KPI et ouvre le détail |
| — | la suppression demande confirmation puis appelle l’API |
| — | la page dédiée crée un évènement et affecte une personne |
| — | le responsable facultatif se recherche, se distingue et s’efface |
| — | le filtre établissement conditionne les équipes sans perdre les participants — bureau |
| — | le filtre établissement conditionne les équipes sans perdre les participants — mobile |
| — | mobile : le formulaire reste lisible en une colonne |
e2e/fiche-salarie.spec.ts
Recette manuelle : Annualisation.
| Groupe | Ce qui est vérifié |
|---|---|
| — | APAJH-61/81 — les RH déclarent la solidarité annuelle desktop |
| — | APAJH-61/81 — la solidarité reste en lecture seule pour un manager desktop |
| — | APAJH-61/81 — les RH déclarent la solidarité annuelle mobile |
| — | APAJH-61/81 — la solidarité reste en lecture seule pour un manager mobile |
| — | qualification importée et téléphone pro géré dans GTA — bureau |
| — | qualification importée et téléphone pro géré dans GTA — mobile |
| — | consultation protégée de l’honorabilité |
| — | consultation protégée de l’honorabilité sur mobile |
| fiche salarié — bandeau et rail | le bandeau résume le salarié et ses trois chiffres |
| fiche salarié — bandeau et rail | sans matricule paie, le bandeau porte « Non synchronisée paie » |
| fiche salarié — bandeau et rail | avec son matricule, la fiche ne porte aucun marqueur provisoire |
| fiche salarié — bandeau et rail | un intérimaire sans matricule porte « Intérim », pas « Non synchronisée paie » |
| fiche salarié — bandeau et rail | le rail ouvre chaque volet par son adresse |
| fiche salarié — compte actif | RH désactive le compte depuis la fiche, qui l’annonce |
| fiche salarié — compte actif | sans le droit sur ce compte, la case n’est pas proposée |
| fiche salarié — compte actif | un manager réactive un intérimaire |
| fiche salarié — compte actif (mobile) | RH désactive le compte depuis la fiche, qui l’annonce |
| fiche salarié — compte actif (mobile) | sans le droit sur ce compte, la case n’est pas proposée |
| fiche salarié — compte actif (mobile) | un manager réactive un intérimaire |
| fiche salarié — Informations | les champs de la paie sont en lecture seule, le reste est éditable par RH |
| fiche salarié — Informations | un rôle manager lit la fiche sans pouvoir l’enregistrer |
| fiche salarié — Informations | le justificatif d’honorabilité part bien en multipart |
| fiche salarié — Informations | le justificatif peut être glissé-déposé sur le champ |
| fiche salarié — Informations | un fichier refusé n’emporte pas celui déjà joint |
| fiche salarié — Informations | RH peut rattacher des qualifications à un salarié |
| fiche salarié — Informations | un rôle manager voit les qualifications comme de simples étiquettes |
| fiche salarié — Contrat | affiche les trois blocs, cadenas compris |
| fiche salarié — Contrat | les dimanches ne sont demandés que sur un contrat non annualisé |
| fiche salarié — Contrat | un agent polyvalent ne propose ni annualisation ni forfait jours — bureau |
| fiche salarié — Contrat | un intérim ne propose ni annualisation ni forfait jours — bureau |
| fiche salarié — Contrat | un agent polyvalent ne propose ni annualisation ni forfait jours — mobile |
| fiche salarié — Contrat | un intérim ne propose ni annualisation ni forfait jours — mobile |
| fiche salarié — Contrat | un rôle manager voit le contrat sans pouvoir le modifier |
| fiche salarié — Contrat | un rôle RH active les droits de délégation |
| fiche salarié — Famille & social | par défaut, un enfant n’expose que son âge |
| fiche salarié — Famille & social | RH voit le détail et peut l’éditer |
| fiche salarié — Famille & social | l’âge le plus long tient dans son champ |
| fiche salarié — Famille & social | l’âge le plus long tient dans son champ (mobile) |
| fiche salarié — n° de sécurité sociale (APAJH-209) | un rôle manager n’en voit pas la trace |
| fiche salarié — n° de sécurité sociale (APAJH-209) | un rôle RH le lit, cadenassé comme les autres champs de la paie |
| fiche salarié — Urgence et Lieux de travail | un Manager n1 édite les personnes à prévenir bien qu’il ne soit pas staff |
| fiche salarié — Urgence et Lieux de travail | sans la capacité, les mêmes contacts sont en lecture seule |
| fiche salarié — Urgence et Lieux de travail | un Manager n1 édite les lieux de travail ; le principal et l’établissement de paie restent en lecture seule |
| fiche salarié — Urgence et Lieux de travail | « Ajouter une équipe » ne propose que les équipes du périmètre |
| fiche salarié — Urgence et Lieux de travail | sans la capacité, les rattachements ne sont que des étiquettes |
| fiche salarié — Compteurs | APAJH-66 / APAJH-282 — acquis paie non éditable sur bureau |
| fiche salarié — Compteurs | APAJH-66 / APAJH-282 — acquis paie non éditable sur mobile |
| fiche salarié — Compteurs | APAJH-61/81 — une référence absente reste vide lors d'une correction desktop |
| fiche salarié — Compteurs | APAJH-61/81 — une référence absente reste vide lors d'une correction mobile |
| fiche salarié — Compteurs | les figures sont lisibles par tous, éditables par le seul staff |
| fiche salarié — Compteurs | un rôle manager voit les compteurs sans bouton Éditer |
| fiche salarié — Compteurs | valider un droit ne déclenche pas l’enregistrement global des compteurs |
| fiche salarié — Compteurs | APAJH-55.2 — distingue disponible, non ouvert et en attente |
| fiche salarié — Compteurs | APAJH-55.3 — une absence CP distingue acquis, planifiés, pris et restant |
| fiche salarié — Compteurs | APAJH-55.3 — une absence spéciale réserve puis consomme le droit EM_H |
| fiche salarié — Compteurs | APAJH-55.2 — les mandats créditent automatiquement les compteurs mensuels |
| fiche salarié — saisies refusées (APAJH-246) | une date de naissance qui contredit le n° de sécurité sociale est refusée |
| fiche salarié — saisies refusées (APAJH-246) | un téléphone trop court est refusé |
| fiche salarié — saisies refusées (APAJH-246) | une adresse email invalide est refusée en français, sous son champ |
| fiche salarié — saisies refusées (APAJH-246) | un salarié de moins de 16 ans est refusé |
| fiche salarié — saisies refusées (APAJH-246) | un n° RPPS renseigné alors qu’il est déclaré non applicable est refusé |
| fiche salarié — saisies refusées (APAJH-246) | une échéance d’honorabilité antérieure à la remise est refusée |
| fiche salarié — saisies refusées (APAJH-246) | une échéance d’honorabilité dans le futur est acceptée |
| fiche salarié — saisies refusées (APAJH-246) | un justificatif au mauvais format ou trop lourd est refusé dès qu’il est choisi |
| fiche salarié — saisies refusées (APAJH-246) | plus de 63 dimanches et jours fériés est refusé sur le volet Contrat |
| fiche salarié — saisies refusées (APAJH-246) | un enfant né dans le futur est refusé, à sa ligne |
| fiche salarié — saisies refusées (APAJH-246) | une personne à prévenir sans téléphone joignable est refusée, à sa ligne |
| fiche salarié — mobile | le rail passe au-dessus du volet et la page ne déborde pas |
| fiche salarié — mobile | le volet reste éditable et sa barre d’actions atteignable |
| fiche salarié — mobile | APAJH-55.2 — les trois états restent lisibles sans débordement |
| fiche salarié — mobile | APAJH-55.3 — CP et EM_H gardent leurs quatre figures sur mobile |
| fiche salarié — mobile | APAJH-55.2 — les crédits de délégation automatiques restent lisibles sur mobile |
| fiche salarié — mobile | un refus de format reste lisible sous son champ (APAJH-246) |
e2e/gallery.spec.ts
Exemptée de recette manuelle — voir l’index.
| Groupe | Ce qui est vérifié |
|---|---|
| galerie du design system | rend toutes les sections sans erreur console |
| galerie du design system | le tableau piloté filtre sur la recherche insensible aux accents |
| galerie du design system | le numéro du jour reste lisible sur chaque teinte de poste |
| galerie du design system | la légende du calendrier nomme les teintes affichées sans élargir le mois |
| galerie du design system | mobile : les tableaux défilent au lieu d’écraser leurs colonnes |
e2e/impersonate.spec.ts
Recette manuelle : Connexion.
| Groupe | Ce qui est vérifié |
|---|---|
| assumer une identité | un token dans l’URL ouvre le portail |
| assumer une identité | sans token, retour à la connexion |
| assumer une identité | rendu sur mobile |
e2e/login.spec.ts
Recette manuelle : Connexion.
| Groupe | Ce qui est vérifié |
|---|---|
| connexion | affiche la carte de connexion |
| connexion | une connexion réussie ouvre le portail |
| connexion | des identifiants invalides affichent une erreur |
| connexion | rendu et connexion sur mobile |
e2e/mes-demandes.spec.ts
Recette manuelle : Absences.
| Groupe | Ce qui est vérifié |
|---|---|
| — | un compte sans fiche salarié est renvoyé vers les RH |
| Mes demandes — bureau | liste les demandes du salarié avec leur état |
| Mes demandes — bureau | APAJH-317 — une demande de modification montre le prévu et le demandé |
| Mes demandes — bureau | APAJH-324 — une demande accordée avec ajustement montre ce qui a été accordé |
| Mes demandes — bureau | APAJH-317 — annuler une demande de modification appelle son DELETE |
| Mes demandes — bureau | APAJH-317 — un retrait refusé relit la liste, et une écriture réussie efface son erreur |
| Mes demandes — bureau | les filtres comptent et restreignent |
| Mes demandes — bureau | annuler une demande en attente appelle DELETE |
| Mes demandes — bureau | demander l’annulation d’une absence validée envoie une demande |
| Mes demandes — bureau | APAJH-273 — une absence validée commencée avant J-14 ne se demande plus en annulation |
| Mes demandes — bureau | APAJH-273 — une annulation que personne ne peut traiter le dit |
| Mes demandes — bureau | l’état vide parle, et le bouton « + » mène au formulaire de demande |
| Mes demandes — mobile | liste les demandes du salarié avec leur état |
| Mes demandes — mobile | APAJH-317 — une demande de modification montre le prévu et le demandé |
| Mes demandes — mobile | APAJH-324 — une demande accordée avec ajustement montre ce qui a été accordé |
| Mes demandes — mobile | APAJH-317 — annuler une demande de modification appelle son DELETE |
| Mes demandes — mobile | APAJH-317 — un retrait refusé relit la liste, et une écriture réussie efface son erreur |
| Mes demandes — mobile | les filtres comptent et restreignent |
| Mes demandes — mobile | annuler une demande en attente appelle DELETE |
| Mes demandes — mobile | demander l’annulation d’une absence validée envoie une demande |
| Mes demandes — mobile | APAJH-273 — une absence validée commencée avant J-14 ne se demande plus en annulation |
| Mes demandes — mobile | APAJH-273 — une annulation que personne ne peut traiter le dit |
| Mes demandes — mobile | l’état vide parle, et le bouton « + » mène au formulaire de demande |
e2e/nouvel-utilisateur.spec.ts
Recette manuelle : Fiche salarié.
| Groupe | Ce qui est vérifié |
|---|---|
| nouvel utilisateur — création | annonce l’invitation prochaine après création sur ordinateur |
| nouvel utilisateur — création | conserve le parcours sans email professionnel sur ordinateur |
| nouvel utilisateur — création | annonce l’invitation prochaine après création sur mobile |
| nouvel utilisateur — création | conserve le parcours sans email professionnel sur mobile |
| nouvel utilisateur — création | crée un salarié sans matricule et mène à sa fiche |
| nouvel utilisateur — création | un matricule déjà connu part tel quel |
| nouvel utilisateur — création | ne propose que les types de contrat actifs |
| nouvel utilisateur — création | un refus de l’API est affiché sans quitter la page |
| nouvel utilisateur — champs obligatoires | les champs manquants sont nommés sous le bouton, jusqu’au dernier |
| nouvel utilisateur — champs obligatoires | un nom de la liste ramène le curseur sur son champ |
| nouvel utilisateur — le type de contrat décide du formulaire | choisir Intérim réduit le dossier à ce qu’une mission demande |
| nouvel utilisateur — le type de contrat décide du formulaire | un intérim part sans établissement de paie |
| nouvel utilisateur — le type de contrat décide du formulaire | un intérim sans date de fin ne peut pas être créé |
| nouvel utilisateur — le type de contrat décide du formulaire | un champ saisi avant de basculer sur Intérim ne part pas |
| nouvel utilisateur — agent polyvalent, hors CCN-66 (APAJH-199) | se crée comme un salarié, sans annualisation ni forfait jours |
| nouvel utilisateur — agent polyvalent, hors CCN-66 (APAJH-199) | plus de 35 h par semaine est refusé sous le champ |
| nouvel utilisateur — agent polyvalent, hors CCN-66 (APAJH-199) | un contrat CCN-66 garde ses 39 h et son régime de temps |
| nouvel utilisateur — agent polyvalent, hors CCN-66 (APAJH-199) | tient sur un téléphone |
| nouvel utilisateur — le dossier complet d’un salarié | l’ETP et les heures mensuelles suivent les heures hebdomadaires |
| nouvel utilisateur — le dossier complet d’un salarié | les dimanches ne sont demandés que hors annualisation |
| nouvel utilisateur — le dossier complet d’un salarié | le régime de temps et la période d’essai partent avec la création |
| nouvel utilisateur — le dossier complet d’un salarié | le statut aidant et ses personnes aidées partent avec la création |
| nouvel utilisateur — le dossier complet d’un salarié | le n° de sécurité sociale part quand le rôle a le droit de le lire |
| nouvel utilisateur — le dossier complet d’un salarié | sans ce droit, le formulaire ne le demande pas et la clé ne part pas |
| nouvel utilisateur — le dossier complet d’un salarié | joindre le justificatif d’honorabilité fait partir un multipart |
| nouvel utilisateur — formats refusés (APAJH-246) | un n° de sécurité sociale sans sa clé est refusé ici, quand l’API l’accepte |
| nouvel utilisateur — formats refusés (APAJH-246) | une clé de sécurité sociale fausse est refusée |
| nouvel utilisateur — formats refusés (APAJH-246) | un n° de sécurité sociale qui contredit la date de naissance est signalé sur le numéro |
| nouvel utilisateur — formats refusés (APAJH-246) | un téléphone trop court est refusé |
| nouvel utilisateur — formats refusés (APAJH-246) | une adresse email invalide est refusée en français, sous son champ |
| nouvel utilisateur — formats refusés (APAJH-246) | un n° RPPS dont la clé de Luhn est fausse est refusé |
| nouvel utilisateur — formats refusés (APAJH-246) | le message part quand le champ est corrigé, et la création aboutit |
| nouvel utilisateur — contrôle à la sortie du champ (APAJH-246) | un téléphone trop court est signalé en quittant le champ, sans rien soumettre |
| nouvel utilisateur — contrôle à la sortie du champ (APAJH-246) | une adresse email invalide est signalée en quittant le champ |
| nouvel utilisateur — contrôle à la sortie du champ (APAJH-246) | rien n’est signalé tant que le champ n’a pas été quitté |
| nouvel utilisateur — contrôle à la sortie du champ (APAJH-246) | le message part dès que le champ est corrigé, sans le quitter à nouveau |
| nouvel utilisateur — accès | un profil sans le droit ne voit pas le bouton |
| nouvel utilisateur — accès | avec le droit, le bouton de l’annuaire ouvre le formulaire |
| nouvel utilisateur — accès | un Salarié n’atteint pas la page, même par son adresse |
| nouvel utilisateur — mobile | le formulaire tient sur un téléphone et crée le salarié |
| nouvel utilisateur — mobile | un format refusé s’affiche sous son champ sans élargir la page |
| nouvel utilisateur — mobile | sur un téléphone, un email invalide est signalé en quittant le champ |
| types homonymes — ordinateur (#129) | envoie l’ID 11 du type choisi, même avec un libellé identique |
| types homonymes — ordinateur (#129) | envoie l’ID 12 du type choisi, même avec un libellé identique |
| types homonymes — ordinateur (#129) | envoie l’ID 13 du type choisi, même avec un libellé identique |
| types homonymes — ordinateur (#129) | envoie l’ID 14 du type choisi, même avec un libellé identique |
| types homonymes — ordinateur (#129) | applique les règles du bon homonyme intérim ou hors convention |
| types homonymes — ordinateur (#129) | bloque le type sélectionné devenu inactif après actualisation |
| types homonymes — mobile (#129) | envoie l’ID 11 du type choisi, même avec un libellé identique |
| types homonymes — mobile (#129) | envoie l’ID 12 du type choisi, même avec un libellé identique |
| types homonymes — mobile (#129) | envoie l’ID 13 du type choisi, même avec un libellé identique |
| types homonymes — mobile (#129) | envoie l’ID 14 du type choisi, même avec un libellé identique |
| types homonymes — mobile (#129) | applique les règles du bon homonyme intérim ou hors convention |
| types homonymes — mobile (#129) | bloque le type sélectionné devenu inactif après actualisation |
e2e/password-reset.spec.ts
Recette manuelle : Mot de passe oublié.
| Groupe | Ce qui est vérifié |
|---|---|
| mot de passe oublié | le lien depuis /login mène à la demande de réinitialisation |
| mot de passe oublié | une demande affiche une confirmation neutre |
| mot de passe oublié | un lien valide permet de choisir un nouveau mot de passe |
| mot de passe oublié | deux mots de passe différents sont refusés côté client |
| mot de passe oublié | un lien invalide/expiré affiche une erreur |
| mot de passe oublié | un lien sans uid/token oriente vers une nouvelle demande |
| mot de passe oublié | rendu sur mobile |
| mot de passe oublié | définit le mot de passe depuis une invitation sur mobile |
e2e/payroll-annual-leave.spec.ts
Recette manuelle : Absences.
| Groupe | Ce qui est vérifié |
|---|---|
| — | APAJH-66 / APAJH-282 — droit paie final et acquisition suivante sur bureau |
| — | APAJH-66 / APAJH-282 — droit paie missing et acquisition suivante sur bureau |
| — | APAJH-66 / APAJH-282 — droit paie negative et acquisition suivante sur bureau |
| — | APAJH-66 / APAJH-282 — droit paie final et acquisition suivante sur mobile |
| — | APAJH-66 / APAJH-282 — droit paie missing et acquisition suivante sur mobile |
| — | APAJH-66 / APAJH-282 — droit paie negative et acquisition suivante sur mobile |
e2e/payroll.spec.ts
Recette manuelle : Éléments variables de paie.
| Groupe | Ce qui est vérifié |
|---|---|
| EVP — bureau | La paie ouvre la page depuis le menu et consulte le détail sans export |
| EVP — bureau | Le mois, l’établissement et la recherche filtrent les données sans conserver les anciennes lignes |
| EVP — bureau | Un rôle non autorisé ne voit ni la page ni son entrée de menu |
| EVP — bureau | Une erreur de lecture reste visible et peut être réessayée |
| EVP — bureau | La pagination et l’actualisation relisent les données |
| EVP — mobile | La paie ouvre la page depuis le menu et consulte le détail sans export |
| EVP — mobile | Le mois, l’établissement et la recherche filtrent les données sans conserver les anciennes lignes |
| EVP — mobile | Un rôle non autorisé ne voit ni la page ni son entrée de menu |
| EVP — mobile | Une erreur de lecture reste visible et peut être réessayée |
| EVP — mobile | La pagination et l’actualisation relisent les données |
e2e/personal-counters.spec.ts
Recette manuelle : Annualisation.
| Groupe | Ce qui est vérifié |
|---|---|
| — | APAJH-83 — consultation personnelle bureau salarié |
| — | APAJH-83 — consultation personnelle bureau RH |
| — | APAJH-83 — cartes et détails issus de l’API bureau |
| — | APAJH-83 — consultation personnelle mobile salarié |
| — | APAJH-83 — consultation personnelle mobile RH |
| — | APAJH-83 — cartes et détails issus de l’API mobile |
| — | APAJH-82/83 — aucun dossier sur /mes-compteurs |
| — | APAJH-82/83 — aucun dossier sur /mon-annualisation |
| — | APAJH-83 — chargement, erreur, reprise et compteurs absents |
| — | APAJH-83 — relevé personnel not_initialized |
| — | APAJH-83 — relevé personnel missing_holiday_calendar |
| — | APAJH-83 — relevé personnel not_applicable |
| — | APAJH-83 — erreur du relevé indépendante des compteurs et reprise |
| — | APAJH-83 — un RH reste dans Mon espace après une navigation personnelle |
e2e/personal-profile-session.spec.ts
Recette manuelle : Fiche salarié.
| Groupe | Ce qui est vérifié |
|---|---|
| — | Mon profil — isole la session après usurpation avec une réponse RH en cache |
| — | Mon profil — isole la session après usurpation avec une réponse RH tardive |
e2e/personal-profile.spec.ts
Recette manuelle : Fiche salarié.
| Groupe | Ce qui est vérifié |
|---|---|
| — | Mon profil — redirige la racine vers Informations |
| — | Mon profil — redirige /inconnu vers Informations |
| — | Mon profil — redirige /compteurs vers Informations |
| — | Mon profil — présente les états vides du dossier |
| — | Mon profil — annonce une erreur API puis permet de recharger |
| — | Mon profil — exige une connexion |
| — | Mon profil — oublie les données RH après déconnexion puis connexion salariée |
| Mon profil — bureau | ouvre son dossier depuis le compte et navigue entre cinq volets sans compteurs |
| Mon profil — bureau | reste en lecture seule dans les cinq volets pour Salarié |
| Mon profil — bureau | reste en lecture seule dans les cinq volets pour Intérimaire |
| Mon profil — bureau | reste en lecture seule dans les cinq volets pour Manager |
| Mon profil — bureau | reste en lecture seule dans les cinq volets pour RH / Admin |
| Mon profil — bureau | respecte les champs masqués par les permissions |
| Mon profil — bureau | explique le compte sans dossier et ne charge aucun salarié |
| Mon profil — mobile | ouvre son dossier depuis le compte et navigue entre cinq volets sans compteurs |
| Mon profil — mobile | reste en lecture seule dans les cinq volets pour Salarié |
| Mon profil — mobile | reste en lecture seule dans les cinq volets pour Intérimaire |
| Mon profil — mobile | reste en lecture seule dans les cinq volets pour Manager |
| Mon profil — mobile | reste en lecture seule dans les cinq volets pour RH / Admin |
| Mon profil — mobile | respecte les champs masqués par les permissions |
| Mon profil — mobile | explique le compte sans dossier et ne charge aucun salarié |
e2e/planning-contracts.api.spec.ts
Recette manuelle : Planning manager.
| Groupe | Ce qui est vérifié |
|---|---|
| — | la disponibilité exclut le salarié sorti et un refus de rattachement empêche le poste — bureau |
| — | la disponibilité exclut le salarié sorti et un refus de rattachement empêche le poste — mobile |
| — | la grille respecte les journées sous contrat — arrivée en cours de semaine — bureau |
| — | la grille respecte les journées sous contrat — fin du CDD en cours de semaine — bureau |
| — | la grille respecte les journées sous contrat — arrivée en cours de semaine — mobile |
| — | la grille respecte les journées sous contrat — fin du CDD en cours de semaine — mobile |
e2e/planning-default-team.api.spec.ts
Recette manuelle : Planning manager.
| Groupe | Ce qui est vérifié |
|---|---|
| — | un salarié sans équipe apparaît sous son établissement — bureau |
| — | un salarié sans équipe apparaît sous son établissement — mobile |
e2e/planning-modulation.api.spec.ts
Recette manuelle : Planning manager.
| Groupe | Ce qui est vérifié |
|---|---|
| — | un créneau ajouté puis abandonné ne part pas avec la modification du créneau initial — bureau |
| — | un créneau ajouté puis abandonné ne part pas avec la modification du créneau initial — mobile |
| — | un repos ponctuel se lit dans la case et dans le détail du jour — bureau |
| — | un repos ponctuel se lit dans la case et dans le détail du jour — mobile |
| — | la poubelle du dernier créneau passe la journée en repos, après confirmation — bureau |
| — | remettre le poste de la trame sur un repos rend la journée à sa trame — bureau |
| — | un créneau ajouté à un repos le lève — bureau |
| — | une pause rémunérée remplace la pause non rémunérée d’une journée modulée — bureau |
| — | la poubelle du dernier créneau passe la journée en repos, après confirmation — mobile |
| — | remettre le poste de la trame sur un repos rend la journée à sa trame — mobile |
| — | un créneau ajouté à un repos le lève — mobile |
| — | une pause rémunérée remplace la pause non rémunérée d’une journée modulée — mobile |
| — | une demi-journée d’absence neutralise les créneaux du matin — bureau |
| — | une demi-journée d’absence neutralise les créneaux du matin — mobile |
e2e/planning-perimeter.api.spec.ts
Recette manuelle : Planning manager.
| Groupe | Ce qui est vérifié |
|---|---|
| — | le planning ne propose que le périmètre du rôle — bureau |
| — | le planning ne propose que le périmètre du rôle — mobile |
e2e/planning-wizard.spec.ts
Recette manuelle : Bibliothèque ▸ Trames — assistant de planification.
| Groupe | Ce qui est vérifié |
|---|---|
| planning — wizard | « Enregistrer et créer un planning » ouvre le wizard sur l’étape Date |
| planning — wizard | « Enregistrer et créer un planning » ouvre le wizard même si la sauvegarde a des alertes |
| planning — wizard | l’équipe par défaut pré-remplit le roster, non coché |
| planning — wizard | cocher un établissement met à jour la liste en direct |
| planning — wizard | ajouter un salarié par recherche l’intègre au roster |
| planning — wizard | chercher un nom qui ne correspond à personne affiche « Aucun résultat » |
| planning — wizard | la recherche de salarié fonctionne aussi par nom d’utilisateur |
| planning — wizard | les équipes et les salariés hors du périmètre du manager n’apparaissent jamais |
| planning — wizard | la pagination limite le roster à 10 salariés et tourne les pages |
| planning — wizard | valider envoie une affectation par salarié coché et revient à la bibliothèque |
| planning — wizard | le toast de fin compte les alertes de chaque affectation |
| planning — wizard | le toast de fin compte les alertes de chaque affectation (mobile) |
| planning — wizard | les jours fériés se règlent par salarié, décochés par défaut |
| planning — wizard | les jours fériés se règlent par salarié, décochés par défaut (mobile) |
| planning — wizard | un chevauchement de planning affiche une alerte avant de valider |
| planning — wizard | confirmer malgré le chevauchement envoie tout de même l’affectation |
| planning — wizard | « ‹ Retour » referme le wizard sans planifier personne |
| planning — wizard | mobile : le wizard défile au lieu de déborder de la page |
| planning — wizard › période envoyée | la reconduction tacite planifie sans date de fin |
| planning — wizard › période envoyée | trois tours finissent le dimanche du dernier tour |
| planning — wizard › période envoyée | la date de début proposée est aujourd’hui en heure de Paris, même après minuit |
e2e/planning.spec.ts
Recette manuelle : Bibliothèque Postes.
| Groupe | Ce qui est vérifié |
|---|---|
| planning manager | le planning a son URL et le menu y conduit |
| planning manager | affiche la grille salariés × jours |
| planning manager | APAJH-103/143 — superpose les évènements et ouvre leur détail en lecture seule |
| planning manager | APAJH-103/143 — diffuse les évènements collectifs selon le périmètre |
| planning manager | APAJH-103/143 — regroupe les évènements en vue mois et utilise une bottom sheet mobile |
| planning manager | APAJH-103/143 — garde la grille en cas d’erreur puis reflète édition et suppression |
| planning manager | le bouton « Légende » ouvre un panneau à droite |
| planning manager | le bouton flottant ouvre le menu d’actions |
| planning manager | navigue d’une période à l’autre |
| planning manager | la flèche « Période suivante » ne bouge pas d’une semaine à l’autre |
| planning manager | passe en vue mois, plus dense et cumulée |
| planning manager | la grille défile dans sa boîte au lieu de pousser la page |
| planning manager | un jour férié est grisé comme un week-end |
| planning manager | chaque unité se termine par une ligne « Poste à pourvoir » |
| planning manager | le clic sur « Poste à pourvoir » ajoute un salarié à l’équipe |
| planning manager | filtre les équipes par leurs établissements et conserve leurs contacts d’astreinte — bureau |
| planning manager | filtre les équipes par leurs établissements et conserve leurs contacts d’astreinte — mobile |
| planning manager | une bande d’équipe se replie et se déplie |
| planning manager | une journée coupée affiche deux postes dans la même case |
| planning manager | deux postes de même code gardent chacun ses horaires |
| planning manager | le total dépassant 44 h est signalé |
| planning manager | un agent polyvalent est signalé dès 35 h, hors CCN-66 — bureau |
| planning manager | un agent polyvalent est signalé dès 35 h, hors CCN-66 — mobile |
| planning manager | « Exporter » est un menu déroulant |
| planning manager | le panneau d’alertes liste les infractions CCN-66 |
| planning manager | le clic sur un poste ouvre le détail de la journée |
| planning manager | « Modifier la journée » ouvre le formulaire, « Retour » revient au détail |
| planning manager | choisir un poste dans la bibliothèque remplit les créneaux et l’écart |
| planning manager | APAJH-291 — retirer le créneau de base garde les autres |
| planning manager | « Enregistrer » n’écrit rien tant que la journée n’a pas changé |
| planning manager | vider une modulation la supprime et rend la journée à la trame |
| planning manager | « Enregistrer » change le lieu seul, sans toucher aux heures |
| planning manager | cocher « Télétravail » suffit à enregistrer la journée |
| planning manager | signale un délai de prévenance non respecté sans refuser la modulation |
| planning manager | « Enregistrer » crée la modulation de la journée |
| planning manager | une case vide ouvre « Affecter un poste » et enregistre le créneau saisi — bureau |
| planning manager | une case vide ouvre « Affecter un poste » et enregistre le créneau saisi — mobile |
| planning manager | une case vide n’écrit rien tant qu’aucun créneau n’est saisi |
| planning manager | la ligne « Poste à pourvoir » affecte le jour cliqué à un salarié libre |
| planning manager | un poste choisi dans la bibliothèque part avec sa clé |
| planning manager | un poste de deux créneaux déplie deux cartes |
| planning manager | un poste de deux créneaux déplie deux cartes (mobile) |
| planning manager | « Poste à pourvoir » déplie un poste de deux créneaux et les enregistre |
| planning manager | « Poste à pourvoir » déplie un poste de deux créneaux et les enregistre (mobile) |
| planning manager | les postes archivés et ceux de la période ne sont pas proposés |
| planning manager | deux postes homonymes restent sélectionnables par leur identité |
| planning manager | la bibliothèque distingue le chargement, le vide et un échec récupérable |
| planning manager | une journée modulée porte ses marqueurs dans la case et dans le panneau |
| planning manager | APAJH-254 — une journée modulée dit ce que la trame prévoyait — bureau |
| planning manager | APAJH-254 — une journée modulée dit ce que la trame prévoyait — mobile |
| planning manager | APAJH-256 — une absence accordée dit le poste qu’elle a pris — bureau |
| planning manager | APAJH-256 — une absence accordée dit le poste qu’elle a pris — mobile |
| planning manager | APAJH-256 — une journée dont la rotation était déjà l’absence n’a rien à dire |
| planning manager | APAJH-254 — une journée que la trame seule répond ne prévoyait rien d’autre |
| planning manager | un poste choisi pour un second créneau part avec sa propre clé |
| planning manager | une journée déjà modulée corrige sa modulation |
| planning manager | « Enregistrer » reste inerte pendant l’envoi |
| planning manager | un refus du serveur reste affiché dans le panneau |
| planning manager | « Retour » abandonne la saisie du formulaire |
| planning manager | une personne d’astreinte porte un téléphone sur sa ligne |
| planning manager | le clic sur un nom ouvre le panneau de l’utilisateur |
| planning manager | le panneau passe de l’utilisateur au poste sans mélanger les deux |
| planning manager | un jour d’absence détaille un statut, pas des horaires |
| planning manager | filtre les salariés par équipe |
| planning manager | la ligne d’un salarié apparaît dans chacune de ses équipes |
| planning manager | filtrer sur une équipe ne laisse qu’une des deux lignes |
| planning manager | un lien profond ouvre la semaine et détache la ligne demandée |
| planning manager | naviguer hors de la semaine du lien garde la ligne détachée |
| planning manager | une date illisible ouvre la semaine courante |
| planning manager | rend la grille sans erreur console |
| planning manager | mobile : la grille ne fait pas déborder la page |
| planning manager › recherche salarié | la recherche salarié réduit la grille à celui choisi, dans chacune de ses équipes — bureau |
| planning manager › recherche salarié | changer d’établissement lève la recherche salarié, sans retour — bureau |
| planning manager › recherche salarié | la recherche salarié réduit la grille à celui choisi, dans chacune de ses équipes — mobile |
| planning manager › recherche salarié | changer d’établissement lève la recherche salarié, sans retour — mobile |
| planning manager › modifier toute la journée | APAJH-291 — chaque bloc d’une journée coupée ouvre la même journée — bureau |
| planning manager › modifier toute la journée | APAJH-291 — chaque bloc d’une journée coupée ouvre la même journée — mobile |
| planning manager › modifier toute la journée | APAJH-291 — une journée coupée s’édite en entier, chaque créneau avec son contexte — bureau |
| planning manager › modifier toute la journée | APAJH-291 — une journée coupée s’édite en entier, chaque créneau avec son contexte — mobile |
| planning manager › modifier toute la journée | APAJH-291 — ajouter puis retirer des créneaux, en un seul enregistrement — bureau |
| planning manager › modifier toute la journée | APAJH-291 — ajouter puis retirer des créneaux, en un seul enregistrement — mobile |
| planning manager › modifier toute la journée | APAJH-291 — une pause rémunérée ne change pas le total, l’écart entre deux créneaux si — bureau |
| planning manager › modifier toute la journée | APAJH-291 — une pause rémunérée ne change pas le total, l’écart entre deux créneaux si — mobile |
| planning — arbitrer la demande du lien | le lien apporte la semaine, la ligne détachée et la décision |
| planning — arbitrer la demande du lien | valider consomme la commande et laisse la semaine en place |
| planning — arbitrer la demande du lien | fermer le panneau retire la commande sans quitter la semaine |
| planning — arbitrer la demande du lien | une demande tranchée entre-temps laisse le contexte et rien à trancher |
| planning — arbitrer la demande du lien | APAJH-273 — le lien rouvre aussi une annulation à arbitrer |
| planning — arbitrer la demande du lien | un refus de lecture n’ouvre rien et laisse la grille intacte |
| planning — arbitrer la demande du lien | un ?absence= qui n’est pas une demande n’est même pas demandé |
| planning — arbitrer la demande du lien | sans le droit de trancher, le panneau est une fiche de lecture |
| planning — arbitrer la demande du lien | APAJH-255 — une demande en attente garde son poste et ouvre l’arbitrage — bureau |
| planning — arbitrer la demande du lien | APAJH-255 — une demande en attente garde son poste et ouvre l’arbitrage — mobile |
| planning — arbitrer la demande du lien | APAJH-273 — une annulation demandée cercle le congé et ouvre l’arbitrage — bureau |
| planning — arbitrer la demande du lien | APAJH-273 — une annulation demandée cercle le congé et ouvre l’arbitrage — mobile |
| planning — arbitrer la demande du lien | APAJH-255 — la journée contestée sort du total de la ligne |
| planning — arbitrer la demande du lien | APAJH-255 — sans le droit de trancher, la case ouvre son détail |
| planning — arbitrer la demande du lien | un seul panneau à la fois : la grille n’est pas cliquable derrière |
| planning — arbitrer la modification du lien | le lien apporte la semaine, la ligne détachée et la modification |
| planning — arbitrer la modification du lien | valider consomme la commande et laisse la semaine en place |
| planning — arbitrer la modification du lien | APAJH-324 — « Ajuster » s’ouvre au planning et valide la journée remaniée |
| planning — arbitrer la modification du lien | fermer le panneau retire la commande sans quitter la semaine |
| planning — arbitrer la modification du lien | une modification tranchée entre-temps n’ouvre rien |
| planning — arbitrer la modification du lien | une autre modification amenée sous le panneau s’ouvre en lecture |
| planning — arbitrer la modification du lien | une absence et une modification dans le même lien n’ouvrent qu’un panneau |
| planning — arbitrer la modification du lien | un ?modification= qui n’est pas une demande n’est même pas demandé |
| planning — la modification demandée sur la grille | APAJH-322 — une modification demandée cercle le poste et ouvre son arbitrage — bureau |
| planning — la modification demandée sur la grille | APAJH-322 — une modification demandée cercle le poste et ouvre son arbitrage — mobile |
| planning — la modification demandée sur la grille | APAJH-322 — la journée dont la modification est demandée reste au total |
| planning — la modification demandée sur la grille | APAJH-322 — sa propre modification ouvre le détail de la journée |
| planning — la modification demandée sur la grille | APAJH-322 — un ?absence= déjà tranché ne masque pas la modification cliquée |
| planning — la modification demandée sur la grille | APAJH-322 — sans le droit de trancher une modification, la case ouvre son détail |
e2e/portal-routing.spec.ts
Recette manuelle : Portail.
| Groupe | Ce qui est vérifié |
|---|---|
| portail — routes | « Utilisateurs » ouvre /utilisateurs |
| portail — routes | un onglet de fiche salarié est une adresse à part entière |
| portail — routes | une fiche sans onglet, ou avec un onglet inconnu, retombe sur Informations |
| portail — routes | mobile : la fiche salarié reste accessible par son adresse |
| portail — cloisonnement de l’espace manager | un salarié n’a ni sélecteur d’espace ni navigation manager |
| portail — cloisonnement de l’espace manager | un salarié saisissant /utilisateurs est renvoyé sur le portail |
| portail — cloisonnement de l’espace manager | un salarié saisissant une fiche salarié est renvoyé sur le portail |
| portail — cloisonnement de l’espace manager | un salarié saisissant /evenements est renvoyé sur le portail |
| portail — cloisonnement de l’espace manager | mobile : un salarié n’a pas non plus de navigation manager |
e2e/postes.spec.ts
Recette manuelle : Bibliothèque Postes.
| Groupe | Ce qui est vérifié |
|---|---|
| bibliothèque — postes | liste les postes de la bibliothèque |
| bibliothèque — postes | le filtre catégorie restreint la liste |
| bibliothèque — postes | la pagination limite le tableau à 10 lignes et tourne les pages |
| bibliothèque — postes | créer un poste de catégorie Nuit — le trou du mockup |
| bibliothèque — postes | mobile : une pause hors des horaires du poste bloque l'enregistrement |
| bibliothèque — postes | créer un poste de deux créneaux |
| bibliothèque — postes | créer un poste de deux créneaux (mobile) |
| bibliothèque — postes | donner puis retirer une couleur à un poste |
| bibliothèque — postes | donner puis retirer une couleur à un poste (mobile) |
| bibliothèque — postes | éditer un poste met à jour la ligne |
| bibliothèque — postes | dupliquer un poste ouvre la création pré-remplie |
| bibliothèque — postes | supprimer un poste demande une confirmation |
| bibliothèque — postes | mobile : le tableau défile au lieu de déborder de la page |
e2e/sidebar.spec.ts
Recette manuelle : Portail.
| Groupe | Ce qui est vérifié |
|---|---|
| portail — navigation | affiche la navigation manager par défaut |
| portail — navigation | bascule vers « Mon espace » et change la navigation |
| portail — navigation | nomme le rôle du compte sous son nom |
| portail — navigation | un compte sans rôle affiche son nom seul |
| portail — navigation | replie la sidebar en rail sur bureau |
| portail — navigation | ouvre le tiroir via le burger sur mobile |
| portail — navigation | mobile : ni sélecteur de rôle ni avatar dans la topbar |
| portail — navigation | mobile : le pied du tiroir se limite à la puce utilisateur |
| portail — navigation | mobile : presser la puce utilisateur referme le tiroir |
e2e/topbar-menus.spec.ts
Recette manuelle : Portail.
| Groupe | Ce qui est vérifié |
|---|---|
| — | topbar — le menu de compte reste accessible |
| — | topbar — la déconnexion désinscrit explicitement cet appareil |
| topbar — notifications réelles | la cloche affiche les notifications du backend et charge la suite au défilement |
| topbar — notifications réelles | « Tout marquer comme lu » persiste après un rechargement |
| topbar — notifications réelles | le filtre n'affiche que les notifications non lues |
| topbar — notifications réelles | la permission navigateur n'est demandée qu'après activation |
| topbar — notifications réelles | une inscription active ne reprend pas un ancien état d'erreur |
| topbar — notifications réelles | mobile : la cloche garde les filtres et la liste dans le viewport |
e2e/trames.spec.ts
Recette manuelle : Bibliothèque Postes.
| Groupe | Ce qui est vérifié |
|---|---|
| bibliothèque — trames | liste les trames de la bibliothèque |
| bibliothèque — trames | une case porte un poste de deux créneaux |
| bibliothèque — trames | une case porte un poste de deux créneaux (mobile) |
| bibliothèque — trames | créer une trame en choisissant un poste existant |
| bibliothèque — trames | affecter un deuxième poste à la même case en fait une journée coupée |
| bibliothèque — trames | rouvrir une case déjà affectée montre ce qu’elle porte déjà |
| bibliothèque — trames | changer uniquement la couleur d’une case déjà affectée la met à jour |
| bibliothèque — trames | une case prend la couleur de son poste, sauf la sienne |
| bibliothèque — trames | une case prend la couleur de son poste, sauf la sienne (mobile) |
| bibliothèque — trames | entrer un poste manuellement l’assigne à la case |
| bibliothèque — trames | un horaire manuel non sauvegardé s’applique sans créer de poste |
| bibliothèque — trames | poser un repos hebdomadaire sur une case |
| bibliothèque — trames | dupliquer une journée sur d’autres jours du cycle |
| bibliothèque — trames | dupliquer une journée sur d’autres jours du cycle (mobile) |
| bibliothèque — trames | ajouter une semaine, puis la supprimer |
| bibliothèque — trames | éditer une trame renomme la trame |
| bibliothèque — trames | supprimer une trame demande une confirmation |
| bibliothèque — trames | ouvrir une trame qui a déjà une règle déclenchée affiche l’icône sans attendre un enregistrement |
| bibliothèque — trames | corriger la cause d’une alerte puis enregistrer fait disparaître l’icône à la réouverture |
| bibliothèque — trames | « Vérifier la trame » affiche les alertes sans rien enregistrer |
| bibliothèque — trames | une sauvegarde qui déclenche une règle avertit sans empêcher le retour à la bibliothèque |
| bibliothèque — trames | une trame en cours se retrouve après une interruption |
| bibliothèque — trames | une trame en cours se retrouve après une interruption (mobile) |
| bibliothèque — trames | ignorer le brouillon repart de la trame enregistrée |
| bibliothèque — trames | un brouillon illisible est ignoré sans bloquer l’éditeur (JSON cassé) |
| bibliothèque — trames | un brouillon illisible est ignoré sans bloquer l’éditeur (semaine sans jours) |
| bibliothèque — trames | un brouillon illisible est ignoré sans bloquer l’éditeur (cycle vide) |
| bibliothèque — trames | un brouillon antérieur à un enregistrement le signale avant d’être repris |
| bibliothèque — trames | annuler l’édition abandonne le brouillon |
| bibliothèque — trames | mobile : le panneau d’alertes reste utilisable sans déborder |
| bibliothèque — trames | mobile : la grille défile au lieu de déborder de la page |
e2e/utilisateurs.spec.ts
Recette manuelle : Annualisation.
| Groupe | Ce qui est vérifié |
|---|---|
| utilisateurs — annuaire | n’affiche que le périmètre : ses établissements et ses salariés |
| utilisateurs — annuaire | compte les effectifs par famille de contrat |
| utilisateurs — annuaire | n'affecte à aucune tuile un type de contrat non classé |
| utilisateurs — annuaire | liste les salariés avec leur contrat et leur ETP |
| utilisateurs — annuaire | la recherche ignore la casse et les accents |
| utilisateurs — annuaire | le filtre établissement restreint la liste |
| utilisateurs — annuaire | un dossier sans matricule paie porte la pastille « Provisoire » |
| utilisateurs — annuaire | un intérimaire sans matricule n’est PAS provisoire |
| utilisateurs — annuaire | ouvrir une ligne mène à la fiche du salarié |
| utilisateurs — annuaire | mobile : le tableau défile au lieu de déborder de la page |
Serveur — pytest
Les tests du backend, exécutés contre une vraie base jetable, migrations comprises.
Le décompte porte sur les fonctions de test. Certaines sont paramétrées et produisent plusieurs cas à l'exécution : le total affiché par pytest est donc un peu supérieur à celui de ce tableau.
| Module | Fonctions | Ce qui est couvert |
|---|---|---|
backend/tests/absences/test_absences_agreement_rules.py | 15 | Règles des accords sur une absence, en avertissement : délais de prévenance des demandes (ancienneté, aidant, don du sang, formation, congé parental), don du sang limité à 1 h 30 et une fois par trimestre, durées maximales (sans solde, sabbatique, parental), ancienneté requise et plafond annuel de l'aidant familial |
backend/tests/absences/test_absences_cancellation.py | 37 | Annulation d'un congé accordé : demandée par le salarié, accordée ou refusée sous motif par un décideur, compteurs inchangés jusqu'à la décision, ligne annulée conservée sans ses justificatifs et sans retenir ses jours, notifications |
backend/tests/absences/test_absences_declaration.py | 85 | Absence déclarée : décompte en jours ouvrables ou ouvrés selon l'établissement, demi-journées, les six refus et deux avertissements que le paramétrage du type déclenche, et la prévisualisation qui les rend avant l'enregistrement |
backend/tests/absences/test_absences_document_reminders.py | 7 | Rappel des justificatifs non déposés dans leur délai — arrêt de travail, certificat enfant malade, attestation de don du sang (48 h), justificatif d'aidant (2 jours ouvrables) — au salarié et aux RH, une seule fois |
backend/tests/absences/test_absences_documents.py | 13 | Justificatifs d'une absence déclarée : formats et taille acceptés, dépôt multipart de plusieurs pièces dans la même transaction que les compteurs, contenu réservé à Admin et RH, et traçabilité du compte déposant |
backend/tests/absences/test_absences_notifications.py | 17 | Notifications d'une demande d'absence : décideurs prévenus exactement comme la file les affiche, rattachés d'abord et jamais l'auteur, superutilisateur sans rôle jamais compté, demande orpheline signalée à l'auteur et à qui peut la réparer (Admin, à défaut RH, à défaut superutilisateur), décision portée au salarié avec ce qui a été accordé à la place |
backend/tests/absences/test_absences_request.py | 32 | Demande d'absence déposée par le salarié : état de naissance déduit de l'auteur, refus d'écrire pour autrui, retrait d'une demande en attente ou d'un congé accordé, refus d'effacer une décision, réservation de compteur relâchée et trace au journal |
backend/tests/absences/test_absences_workflow.py | 40 | Décision d'une demande d'absence : validation et refus motivé, garde d'état et conflit de version, matrice des rôles dont le DA qui lit sans trancher, requalification et re-périodisation au moment d'accorder, effet sur les compteurs et trace au journal |
backend/tests/absences/test_document_files.py | 19 | Consultation privée des justificatifs, permissions et périmètres, suppression disque après commit et conservation lors des annulations |
backend/tests/planning_absences/test_planning_absence.py | 49 | Absences sur le calendrier du planning : une absence déclarée prime sur la trame et sur la modulation, prend la journée entière même à la demi-journée, rend au planning les jours que la convention de l'établissement ne décompte pas, dit le poste qu'elle a retiré, et traverse les règles de temps de travail sans rien produire |
backend/tests/planning_absences/test_planning_absence_detail.py | 8 | Lecture d'une demande d'absence seule : ce que le planning prévoyait le premier jour couvert, résolu sans appliquer les absences, et servi sur cette seule lecture et jamais sur la file |
backend/tests/planning_absences/test_planning_absence_neutralization.py | 10 | Ce qu'une absence accordée laisse des créneaux qu'elle recouvre en partie : ses heures retirées, la demi-journée coupée à midi, le créneau entièrement recouvert neutralisé, la demande en attente sans effet, la même coupure dans l'annualisation, et les règles de temps de travail mesurées sur ce qui reste |
backend/tests/planning_absences/test_shift_change_calendar.py | 9 | Demande de modification en attente au planning : anneau orange sur le poste prévu, demande d'absence prioritaire, anneau masqué par une absence accordée sur la journée entière ou sur le créneau qu'elle neutralise, demandes tranchées sans marque, lecture en une requête par la seule période |
backend/tests/shift_changes/test_shift_change_admin.py | 18 | Demande de modification de journée au back-office : correction d'une demande en attente tracée, version avancée et durée recalculée ; formulaire dépassé refusé ; validation appliquée au planning par la décision de l'API ; refus sans motif et accord d'une demande corrigée sans motif annulés en entier ; compte sans droit de trancher refusé, propre demande ni corrigée ni tranchée ; demande tranchée en lecture seule, créneaux compris, et non supprimable ; motif saisi sans décision signalé perdu |
backend/tests/shift_changes/test_shift_change_day.py | 7 | Journée du salarié lue avant une demande de modification : créneaux de la trame ou de la modulation, poste, établissement et pause compris ; renvoyée telle quelle, elle ne change rien au dépôt |
backend/tests/shift_changes/test_shift_change_decision.py | 26 | Demande de modification de journée tranchée : l'accord écrit ou remplace la modulation du jour, créneaux, poste, établissement et pause conservés, motif et options recopiés sur chaque créneau, photo réécrite ; refus motivé ; conflit de version, demande déjà tranchée, DA, propre fiche, fenêtre de qui décide et contrat échu refusés sans rien écrire ; permission accordée aux cinq rôles |
backend/tests/shift_changes/test_shift_change_filing.py | 32 | Demande de modification de journée déposée par le salarié : fiche déduite du compte, borne J-14, contrat requis, poste et établissement limités à la journée actuelle, refus d'une demande qui ne change rien ou d'une deuxième en attente, photo de la journée, lecture par périmètre, retrait d'une demande en attente et trace au journal |
backend/tests/shift_changes/test_shift_change_notifications.py | 12 | Notifications d'une demande de modification de journée : décideur rattaché sonné au dépôt, jamais l'auteur, repli sur les non-rattachés, demande orpheline signalée à l'auteur et à l'Admin, décision portée au salarié depuis l'API comme depuis le back-office, retrait silencieux |
backend/tests/test_absence_filed_at_migration.py | 1 | Ajout de la date de dépôt d'une absence : les absences antérieures restent sans date, au lieu de recevoir celle de la migration |
backend/tests/test_absence_referential_seed.py | 13 | Référentiel d'absence de développement : 52 motifs, 15 raccords compteurs, synchronisation idempotente et protections contre les compteurs consommables orphelins |
backend/tests/test_absences.py | 25 | Référentiel paramétrable des types d'absence : classement à deux niveaux, unité de saisie, plafond annuel et refus d'un code déjà porté par un poste |
backend/tests/test_account_activation.py | 10 | Activation et désactivation d'un compte : droits RH et encadrants sur les intérimaires, refus sur son propre compte, trace au journal, actions de masse du back-office et compteurs suspendus |
backend/tests/test_account_auto_closing.py | 6 | Désactivation automatique d'un compte à la fin de ses contrats : contrat échu fermé, contrat en cours ou à venir et fiche sans contrat épargnés, convergence, trace « Système » et commande manuelle |
backend/tests/test_account_invitations.py | 31 | Invitations et réinitialisations préparées : création, renvoi, droits, cadence globale, concurrence et reprises après interruption |
backend/tests/test_admin_mfa.py | 13 | MFA du back-office : enrôlement TOTP, codes de secours, réinitialisation et révocation des sessions |
backend/tests/test_annualization_admin.py | 8 | Reprise de l'annualisation après formulaires imbriqués de contrat, créneaux de modulation et suppression d'absences dans le back-office |
backend/tests/test_annualization_calendar.py | 11 | Calendrier contractuel et solidarité RH : exemple à 1 414 h, quatre statuts, temps partiel, interruptions, permissions, reprise et conservation des fériés historiques |
backend/tests/test_annualization_modulations.py | 6 | Séparation trame et modulations : théorique, projection future, transfert vers l'acquis, absences, repos et cohérence des API |
backend/tests/test_annualization_projection.py | 10 | Projection annuelle : reconstitution ABR et ABNR sur les créneaux nets, congés déjà déduits du seuil, arrêté à date, corrections RH et cohérence des API |
backend/tests/test_annualization_report.py | 19 | Tableau d'annualisation journalier et mensuel : barème annuel, planning, temps réalisé, absences, corrections et droits d'accès |
backend/tests/test_annualization_target_migration.py | 1 | Reprise des objectifs automatiques, RH ou ambigus, archive des barèmes et conservation des corrections et dates de consolidation |
backend/tests/test_annualization_targets.py | 13 | Objectif individuel : contrats, congés utilisables, droits RH, réserve, fériés de la période et égalité des trois API |
backend/tests/test_annualization_updates.py | 24 | Consolidation quotidienne de l'annualisation : idempotence, compensation, corrections RH, reprise historique, permissions et concurrence MySQL |
backend/tests/test_audit.py | 22 | Piste d’audit des écritures API : acteur, objet ciblé, différences, accès et rétention |
backend/tests/test_auth.py | 25 | Connexion JWT et refus d'un compte désactivé, endpoint /me/, compte de démonstration et bouton « Assumer l'identité » |
backend/tests/test_back_office_roles.py | 7 | Accès des rôles RH à tout le back-office : entrée sans statut équipe, second facteur, mêmes écrans qu'un super-utilisateur |
backend/tests/test_contract_type_migration.py | 1 | Conservation des types de contrat homonymes et de leurs rattachements après suppression de nature |
backend/tests/test_contract_types.py | 18 | Référentiel paramétrable des types de contrat et de leurs familles |
backend/tests/test_counter_acquisition.py | 17 | Acquisition automatique CP, CT, ANC, EM_H, JRS et annualisation : règles, reprises, audit et idempotence |
backend/tests/test_counter_catalog_migration.py | 1 | Migration du catalogue de compteurs : conservation des soldes, périodes et acquisitions historiques |
backend/tests/test_counter_entitlements.py | 11 | Attribution et états des compteurs : déblocage, validation, refus, expiration, concurrence et audit |
backend/tests/test_counter_integration.py | 21 | Pont transactionnel entre absences, temps réalisé et compteurs : mouvements, versions, idempotence, compensations, unités et concurrence |
backend/tests/test_counter_integration_migration.py | 1 | Migration du pont absences-compteurs : conservation des absences et soldes existants, puis préconfiguration de la matrice métier |
backend/tests/test_counters.py | 44 | Compteurs de congés, compte épargne-temps et annualisation : API, corrections et seuils d'alerte |
backend/tests/test_dashboard.py | 23 | Tableau de bord manager : fenêtres des évènements, périmètres et droits, astreinte personnelle, demandes réelles, dossiers sans matricule hors intérim, dernier fichier paie réussi et concordance des alertes avec le planning avant et après correction |
backend/tests/test_data_import_contract_types.py | 4 | Import des types homonymes par code CEGI, conservation des classifications et refus atomiques |
backend/tests/test_data_imports.py | 40 | Parsing, idempotence, audit et import transactionnel des exports CEGI |
backend/tests/test_delegation_counters.py | 21 | Mandats représentatifs, crédits mensuels automatiques, reports et partages d'heures de délégation |
backend/tests/test_devtools_seeds.py | 25 | Seed de développement sur deux années : cohorte, périmètres, cycles sans alerte, anomalies isolées, droits paie, calculs métier et conservation des essais de recette |
backend/tests/test_dump_docs_admin_facts.py | 16 | Introspection du back-office : écrans, colonnes, filtres, sous-listes et droits |
backend/tests/test_dump_docs_facts.py | 11 | Introspection qui alimente la documentation générée : modèles, champs, relations |
backend/tests/test_dump_docs_route_facts.py | 12 | Introspection des routes de l'API : chemins, verbes autorisés et permissions exigées |
backend/tests/test_dump_docs_schedule_facts.py | 7 | Introspection de l'ordonnancement Celery : tâches planifiées, horaires et fuseau |
backend/tests/test_email.py | 15 | Transport des courriels par Microsoft Graph (certificat, MIME, erreurs, confidentialité) et le backend console lisible utilisé en local |
backend/tests/test_employee.py | 238 | Fiche salarié : champs, contrats, enfants à charge et masquage selon les droits |
backend/tests/test_establishment.py | 67 | Référentiel organisationnel : sites, pôles, établissements, services, codes de paye |
backend/tests/test_events.py | 20 | Évènements et formations : types paramétrables, périmètre, participants et alertes de conflit avec les absences validées |
backend/tests/test_health.py | 2 | Sonde de santé utilisée par Docker et par le proxy |
backend/tests/test_holidays.py | 32 | Référentiel des jours fériés et sa synchronisation nocturne depuis api.gouv.fr |
backend/tests/test_honorability_alerts.py | 12 | Alerte RH de renouvellement de l'attestation d'honorabilité : échéance, seuils J-60/J-30/J-15, regroupement et idempotence |
backend/tests/test_interim_contract_regime.py | 6 | Contrat d'intérim : ni annualisation ni forfait jours, à la création, sur la fiche et au back-office, et remise à zéro des contrats existants |
backend/tests/test_leave_reminders.py | 9 | Rappels de congés : JRS restants à J-60, J-30 et J-15 de la fin de période (ALT-JRS-02), congé principal de 12 jours ouvrables continus non posé au 1er septembre et au 1er octobre (ALT-PCP-01), destinataires et envoi unique |
backend/tests/test_media_migration.py | 6 | Reprise des fichiers historiques : chemins, empreintes, pagination, simulation, collisions et interruptions |
backend/tests/test_night_compensatory_rest.py | 4 | Repos compensateur nuit (R-F05/AL-E03) : crédit automatique du compteur RC depuis les vraies journées d'un contrat de nuit, idempotence et exclusion des contrats hors travail de nuit |
backend/tests/test_notifications.py | 15 | Historique des notifications, lecture persistante, appareils Firebase et tolérance aux installations révoquées |
backend/tests/test_on_call.py | 44 | Astreintes : consultation collaborative, contrats éligibles, couverture continue, concurrence, droits temporaires et back-office |
backend/tests/test_outside_collective_agreement.py | 17 | Agent polyvalent hors CCN-66 : création comme un salarié, CP seul compteur ouvert, ni annualisation ni forfait jours, plafond de 35 h au contrat et au planning |
backend/tests/test_password_reset.py | 7 | Parcours de réinitialisation du mot de passe, de la demande au nouveau mot de passe |
backend/tests/test_payroll.py | 17 | Consultation des EVP, droits et périmètres, périodes, absences validées et données prévisionnelles |
backend/tests/test_payroll_leave.py | 18 | Droits CA importés de la paie : initialisation, cumuls mensuels, finalisation, corrections, rejeux, concurrence et protection des écritures |
backend/tests/test_payroll_leave_migration.py | 1 | Reprise CA/ANC sans double débit : contre-passations, consommations manuelles, annulation d'une ancienne absence et conservation des objectifs historiques |
backend/tests/test_planning.py | 38 | Rattachement d'une trame à un salarié réel, daté : clôture de l'ancienne affectation et versionnage de la trame éditée |
backend/tests/test_planning_calendar.py | 83 | Calendrier du planning : résolution d'une journée depuis le cycle de la trame, bandeaux d'équipe, astreintes, alertes du moteur de règles et disponibilité d'un jour |
backend/tests/test_planning_override.py | 101 | Modulation d'un poste : une journée écrite à la main prend le pas sur la trame, journée coupée comprise, et les règles de temps de travail la comptent à la place de la journée théorique |
backend/tests/test_planning_override_audit.py | 16 | Journal des modulations : chaque écriture d'une journée modulée, par l'API comme au back-office, laisse sa ligne avec ses créneaux, sans sauter le recalcul de l'annualisation — l'accord d'une demande de modification compris |
backend/tests/test_postes.py | 34 | Bibliothèque de postes : créneaux successifs, durée nette, franchissement de minuit, pause rémunérée comprise dans un créneau et cloisonnement par compte |
backend/tests/test_postes_slots_migration.py | 1 | Reprise des postes en créneaux, la pause non rémunérée devenant l'écart entre deux créneaux |
backend/tests/test_roles.py | 35 | Rôles datés par établissement et contrôle d'accès qui en découle |
backend/tests/test_rules_engine.py | 41 | Moteur de règles du temps de travail : validation d'une règle en back-office, évaluation d'un planning contre le pack actif (findings gradués AL-A01/AL-A02), commandes de contrôle et de seed, et documentation générée des paramètres |
backend/tests/test_skills.py | 8 | Référentiel des qualifications et son rattachement multi-valué à un salarié |
backend/tests/trames/test_trames_alerts.py | 11 | Alertes de temps de travail d'une trame, évaluées par le moteur de règles sur le cycle répété dans les deux sens : durées quotidiennes, coupures, repos quotidien et moyenne sur 12 semaines |
backend/tests/trames/test_trames_library.py | 37 | Bibliothèque personnelle de cycles de travail d'un manager : cases assignées à un poste ou à un repos, cloisonnement par compte, versions archivées quand la trame planifie quelqu'un, et jeu de démonstration |
backend/tests/trames/test_trames_preview.py | 4 | « Vérifier la trame » : les alertes d'une trame calculées sans rien enregistrer ni archiver, sur les seuls postes du compte |
Total : 1893 fonctions de test.