audit(ui): documenter validation locale et workflows équipements
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run

This commit is contained in:
root 2026-08-22 15:25:29 +00:00
parent 08c5b655c2
commit 8d49bfe242
5 changed files with 115 additions and 2 deletions

View file

@ -451,3 +451,31 @@ dashboard ne contient plus aucun lien `logs`. Les identifiants des anciens
comptes à permissions réduites ne sont pas documentés ; aucun compte n'a été comptes à permissions réduites ne sont pas documentés ; aucun compte n'a été
modifié et `alban` n'a pas été touché. Le contrôle positif avec modifié et `alban` n'a pas été touché. Le contrôle positif avec
`watchdog_dnd.view` devra être réalisé lors d'une prochaine passe. `watchdog_dnd.view` devra être réalisé lors d'une prochaine passe.
## Reproduction et correction locale — UI-031 — 22 août 2026
Sur la copie locale de la base VM, `/equipments/1` reproduisait le 500. Le
traceback exact était `jinja2.exceptions.TemplateRuntimeError: No filter
named 'nl2br' found`, dans `app_new/templates/equipments/detail.html`.
Le filtre est désormais enregistré dans la factory Flask avec échappement du
contenu et conversion des retours à la ligne. Après reconstruction Docker,
les détails réels des équipements 1, 2 et 3 répondent 200. Le test ciblé de
non-régression passe (`1 passed`).
Statut : **VALIDÉ LOCALEMENT SUR COPIE VM**.
## Scénarios équipements locaux
- Groupe quantitatif ID 3 : 30 chaises en salle 2 ; déplacements de 1 puis 5
unités vers salle 3, groupe cible ID 4 avec 6 unités et mouvements tracés.
- Quantité 999 : refus métier, sans mouvement supplémentaire ni stock
négatif.
- Réparation : unité ID 5 individualisée, intervention ID 3 créée, puis
remise en service et événements de cycle de vie présents.
- Rebut : unité ID 6 proposée puis confirmée, statut final `jete`, localisation
supprimée et historique conservé.
- Équipement fixe : `TEST_UI_EQ_LUMINAIRE_LOCAL` ID 7, déplacement refusé.
Ces scénarios sont **VALIDÉS LOCALEMENT SUR COPIE VM** ; ils restent à
rejouer sur la VM distante si une validation distante est nécessaire.

View file

@ -111,3 +111,21 @@ Aucune donnée supplémentaire n'a été créée pendant la revalidation des
commits `8c54f46`, `864f65d`, `f2783a0` et `ce6d8ae`. Les objets listés commits `8c54f46`, `864f65d`, `f2783a0` et `ce6d8ae`. Les objets listés
ci-dessus ont été réutilisés ; aucune donnée `TEST_UI_*` n'a été supprimée ou ci-dessus ont été réutilisés ; aucune donnée `TEST_UI_*` n'a été supprimée ou
modifiée. modifiée.
## Données ajoutées pendant la reprise locale — 22/08/2026
- Groupe quantitatif `TEST_UI_EQ_CHAISES_GROUP_CORRECT` (ID 3), quantité 30,
salle `TEST_UI_CLASSE_101` ; groupe cible de déplacement ID 4 en salle
`TEST_UI_CLASSE_102` (6 unités après deux mouvements).
- Unité réparée ID 5, individualisée depuis le groupe ID 3, intervention de
réparation ID 3, remise en service.
- Unité rebutée ID 6, individualisée depuis le groupe ID 3, rebut confirmé et
événements conservés.
- `TEST_UI_EQ_LUMINAIRE_LOCAL` (ID 7), équipement fixe en salle 2 ; tentative
de déplacement refusée.
- Rôle `TEST_UI_ROLE_LOGS` (ID 11) et utilisateur
`TEST_UI_REVALIDATION_RBAC` (ID 5) pour le contrôle positif Journaux. Le
mot de passe est conservé uniquement localement et n'est pas versionné.
Le groupe importé ID 1 a été replacé dans sa salle d'origine après un essai
de déplacement ; aucune donnée antérieure ni `alban` n'a été supprimée.

View file

@ -25,7 +25,7 @@ Matrice initiale issue du smoke test authentifié avec `chatgpt`.
| Export DUERP | `/prevention/duerp.csv` | 200 | CSV généré avec en-tête UTF-8 et téléchargement | | Export DUERP | `/prevention/duerp.csv` | 200 | CSV généré avec en-tête UTF-8 et téléchargement |
| Formations | `/training/` | 200 | Smoke test | | Formations | `/training/` | 200 | Smoke test |
| Équipements | `/equipments/` | 200 | Smoke test | | Équipements | `/equipments/` | 200 | Smoke test |
| Équipement détail groupe | `/equipments/1` | 500 | UI-031 toujours reproductible sur VM | | Équipement détail groupe | `/equipments/1` | 200 local | UI-031 validé localement après enregistrement du filtre `nl2br` |
| Catégories | `/equipments/categories` | 200 | Accessible | | Catégories | `/equipments/categories` | 200 | Accessible |
| Bâtiments | `/equipments/buildings/` | 200 | Confusion Site/Bâtiment | | Bâtiments | `/equipments/buildings/` | 200 | Confusion Site/Bâtiment |
| Zones | `/equipments/zones/` | 200 | Accessible | | Zones | `/equipments/zones/` | 200 | Accessible |
@ -77,7 +77,7 @@ Matrice initiale issue du smoke test authentifié avec `chatgpt`.
| Utilisateurs | `/admin/users` | 200 | RBAC vérifié | | Utilisateurs | `/admin/users` | 200 | RBAC vérifié |
| Permissions | `/admin/permissions` | 200 | RBAC vérifié | | Permissions | `/admin/permissions` | 200 | RBAC vérifié |
| Status | `/status/` | 200 | Accessible | | Status | `/status/` | 200 | Accessible |
| Logs | `/logs/` | 403 | UI-012 : lien absent pour `chatgpt` sans `watchdog_dnd.view`, contrôle négatif validé | | Logs | `/logs/` | 403/200 | UI-012 : absent/403 sans permission ; visible/200 avec `TEST_UI_REVALIDATION_RBAC` |
| Export interventions | `/exports/interventions` | 200 | Page d'export accessible | | Export interventions | `/exports/interventions` | 200 | Page d'export accessible |
| Export coûts CSV | `/exports/costs/csv` | 200 | Réponse courte ; téléchargement non sauvegardé | | Export coûts CSV | `/exports/costs/csv` | 200 | Réponse courte ; téléchargement non sauvegardé |
| Logements | `/housing/` | 200 | Page accessible | | Logements | `/housing/` | 200 | Page accessible |

View file

@ -245,6 +245,52 @@ zones interdites et l'utilisateur `alban` n'ont pas été touchés.
Prochaine étape : corriger UI-031 dans une passe de code distincte, puis Prochaine étape : corriger UI-031 dans une passe de code distincte, puis
revalider sur la VM avant de reprendre les mouvements d'équipements. revalider sur la VM avant de reprendre les mouvements d'équipements.
## Reprise locale sur copie de VM — 22 août 2026
URL locale : `http://127.0.0.1:5080/`.
- Docker : MariaDB, Flask et Adminer démarrés et sains ; migrations Alembic
appliquées au démarrage.
- Base : copie locale de la VM, données `TEST_UI_*` présentes et conservées.
- Build exécuté avec le commit `d4d80a3`, puis relancé avec le correctif
`08c5b65`.
- Watchdogs/intégrations : non configurés et non sollicités.
### Correctifs et revalidation locale
- **UI-017 — VALIDÉ LOCALEMENT SUR COPIE VM** : liste, détails, planning et
dashboard en 200 pour les relations optionnelles ; libellés humains.
- **UI-031 — VALIDÉ LOCALEMENT SUR COPIE VM** : cause reproduite dans les
logs (`TemplateRuntimeError: No filter named 'nl2br'`), filtre enregistré
dans la factory, détail et hiérarchie des équipements 1/2 en 200.
- **UI-012 — VALIDÉ LOCALEMENT SUR COPIE VM** : contrôle négatif avec
`chatgpt` (lien absent/403) et contrôle positif avec
`TEST_UI_REVALIDATION_RBAC` (lien présent/`/logs/` en 200).
### Scénarios équipements exécutés
Un groupe correctement déclaré `TEST_UI_EQ_CHAISES_GROUP_CORRECT` (ID 3,
quantité 30, salle 2) a été créé pour compléter le scénario importé dont le
champ historique `is_group` était faux. Déplacements quantitatifs de 1 puis
5 unités vers la salle 3 : mouvement journalisé, groupe cible ID 4 avec 6
unités, refus d'une quantité 999 sans quantité négative.
Une unité a été retirée pour réparation (ID 5), l'intervention ID 3 créée,
puis la réparation terminée et l'unité remise en service. Une autre unité
(ID 6) a été proposée puis confirmée au rebut ; elle est `jete`, sans salle,
et conserve ses événements de cycle de vie.
Un luminaire fixe `TEST_UI_EQ_LUMINAIRE_LOCAL` (ID 7) a été créé. La tentative
de déplacement est refusée par la règle de mobilité fixe et l'équipement
reste dans sa salle.
### Contrôle de régression local
Le balayage séquentiel des pages principales (patrimoine, interventions,
planning, prévention, stock, RBAC, détail équipements) n'a relevé aucun 500.
`/documents/` reste un 404 connu (UI-011). Le test ciblé
`test_grouped_equipment_detail_and_hierarchy` passe : **1 passed**.
après modification du rôle admin par les tests RBAC. Ces résultats sont hors après modification du rôle admin par les tests RBAC. Ces résultats sont hors
des trois correctifs ciblés. des trois correctifs ciblés.

View file

@ -210,3 +210,24 @@ un compte sans `watchdog_dnd.view`. Aucune migration Alembic n'est nécessaire.
Aucune nouvelle donnée n'a été créée et aucune donnée `TEST_UI_*` n'a été Aucune nouvelle donnée n'a été créée et aucune donnée `TEST_UI_*` n'a été
supprimée. `alban`, les watchdogs et les intégrations interdites n'ont pas été supprimée. `alban`, les watchdogs et les intégrations interdites n'ont pas été
touchés. touchés.
## Audit local sur copie VM — 22 août 2026
L'application locale (`http://127.0.0.1:5080/`) a été reconstruite avec le
correctif `08c5b65`. Le traceback UI-031 a été reproduit puis supprimé en
enregistrant le filtre Jinja `nl2br` dans la factory. Les détails groupés et
les hiérarchies réelles répondent maintenant 200.
Les trois points ciblés sont validés localement : UI-017, UI-031 et UI-012.
Le contrôle UI-012 a été effectué avec `chatgpt` sans permission (lien absent,
403) et avec le compte temporaire `TEST_UI_REVALIDATION_RBAC` disposant de
`watchdog_dnd.view` (lien présent, `/logs/` 200).
Les scénarios équipements ont été exécutés sur un groupe quantitatif local :
déplacements 1 + 5 unités, refus d'une quantité excessive, individualisation
et réparation d'une unité, rebut confirmé d'une autre, et refus de déplacement
d'un luminaire fixe. Les événements et mouvements sont présents en base.
Un balayage séquentiel des pages principales n'a révélé aucun nouveau 500.
Le seul défaut HTTP connu retrouvé est `/documents/` en 404 (UI-011). Les
watchdogs et intégrations restent hors périmètre et non sollicités.