gmao/docs/ui-audit/PROGRESS.md

192 lines
11 KiB
Markdown
Raw Normal View History

# Avancement de l'audit
Dernière mise à jour : 22 août 2026 — reprise après interruption.
## État global
État : **en cours**. Les tests doivent continuer ; l'audit n'est pas déclaré
terminé.
## Phases
| Phase | État | Notes |
|---|---|---|
| Santé, connexion, version | Terminé | Version 0.1.0-dev.2, commit unknown |
| Menu et smoke test | Partiel | Pages principales testées séquentiellement |
| RBAC | Partiel avancé | multi-rôles, retrait/deny et accès directs testés ; menu non filtré |
| Établissement | Partiel | Sites, bâtiments et zones créés ; confusion site/bâtiment |
| Salles | Bloqué | Select bâtiment vide sur `/equipments/rooms/new` |
| Équipements | Partiel | Création guidée/avancée et assistant inventaire testés ; salles bloquées |
| Interventions | Partiel | Création, détail, édition et erreur liste testés |
| Planning | Partiel | time/availability/tâches testés ; disponibilité semble dupliquée |
| Prévention | Partiel | Validation invalide et création d'un agent TEST_UI vérifiées |
| Stock / produits | Partiel avancé | Produit/référence/conditionnement, emplacements, lots, réception, sortie FEFO, transfert et inventaire testés ; état du stock 500, transvasement/prévision 500 |
| Personnel | Partiel | Agent TEST_UI créé et retrouvé dans la page prévention |
| Documents | Partiel | `/documents/` 404 ; `/cleaning/documents` 200 ; upload réel non effectué faute de cible publique stable |
| Responsive/accessibilité | Partiel | entreprises 390x844 et 768x1024 sans débordement |
## Dernière action réussie
- Connexion `chatgpt`.
- Vérification HTTP des pages principales.
- Création de données `TEST_UI_*` listées dans `CREATED_TEST_DATA.md`.
- Smoke responsive `/companies/` en 390x844 et 768x1024 sans débordement.
- Formulaire produit ouvert et rempli ; la soumission est restée bloquée plus
de 30 secondes, sans nouvelle tentative pour ne pas charger la VM.
- Formulaire prévention ouvert et rempli ; la soumission est restée bloquée,
sans répétition.
## Blocages
- `/cleaning/transvasement` → 500.
- `/cleaning/forecast-config` → 500.
- `/equipments/rooms/new` → aucun bâtiment dans le sélecteur.
- L'instance a déjà subi des indisponibilités temporaires lors d'un crawl trop
rapide ; reprendre avec une seule session et des délais longs.
- La soumission de `/cleaning/products/new` a de nouveau dépassé le délai lors
d'un test isolé ; données de produit à vérifier avant toute répétition.
- La soumission d'un agent prévention a également dépassé le délai ; analyser
les logs/ressources avant de qualifier le comportement applicatif.
- Intervention ID 1 créée sans salle : détail/édition 200, liste principale
500 ; cas ajouté aux bugs UI-017/UI-018.
- Reproduction du tableau de bord après cette création : `/` répond 500 ; le
journal confirme `dashboard/index.html:495` (`interv.equipment.name` sur une
relation nulle), ajouté en UI-019.
- Smoke complémentaire : scheduled, meters, consumables, admin-tasks, rules,
formations personnelles, prévention, lifecycle, à jeter, anciens, services
et types de salles répondent 200 ; `/documents/` répond 404.
- Création RBAC : rôles 9/10 et utilisateurs 3/4 ; union multi-rôles, deny
individuel et 403 directs vérifiés.
- Filtres lots/équipements/interventions testés ; pagination incohérente sur
interventions/entreprises et absence de recherche visible sur entreprises.
- Validations vides : entreprises et interventions renvoient 500 ; rôles et
produits restent sur le formulaire avec validation.
- Smoke complémentaire : stock/emplacements/transferts/mouvements/inventaire,
création équipement avancée et assistant inventaire, pièces, contrats,
formations, services, types de salles, lot, tâches et formulaires de
disponibilité/fermeture répondent 200.
- Navigation : `/logs/` reste visible dans le HTML mais répond 403 pour
`chatgpt`, ajouté en UI-020.
- Les liens supplémentaires du menu (exports, logements, compteurs,
planificateur, profil, alertes et messagerie) ont répondu 200 ; aucun bouton
de synchronisation/intégration n'a été déclenché.
- `/planning/` répond 200 en environ 5,5 s et produit une page d'environ
347 Ko sur cette VM ; à surveiller comme performance perçue, sans test de
charge.
- Dernier contrôle santé : `/health/` répond 200, base MySQL connectée,
environnement `development`, version `0.1.0-dev.2`, commit `unknown` ; un
accès anonyme à `/` redirige correctement vers la connexion.
- Contrôle des identifiants inexistants : équipements, interventions,
entreprises, lots, produits, pièces, contrats et formations renvoient tous
404 proprement (aucun 500 observé).
- Paramètres de liste invalides (`page=abc`, page négative, recherche avec
caractères spéciaux, filtres inconnus) : les quatre URLs testées répondent
200 sans erreur serveur.
- Connexion avec identifiants inconnus : le formulaire reste en 200 et affiche
un message d'erreur, sans redirection ni ouverture de session.
- La validation métier prévention `/prevention/risk` avec unité/danger vides et
cotations hors plage redirige vers la page avec message d'erreur, sans créer
de donnée.
- Création personnel : `TEST_UI_AGENT ENTRETIEN` a été créé via
`/prevention/staff`, puis retrouvé dans la page (HTTP 302 puis 200).
- Création prévention complémentaire : risque DUERP et entrée de registre
`TEST_UI_*` créés, puis retrouvés dans `/prevention/` après redirection.
2026-08-22 14:01:14 +02:00
- Export DUERP : `/prevention/duerp.csv` répond 200 avec un CSV UTF-8 et un
nom de fichier de téléchargement correct.
- Les formulaires de fermeture et de nouvelle tâche planning s'appuient sur
l'injection JavaScript du CSRF ; sans ce script, aucun champ caché n'est
présent et le serveur renvoie 400 (UI-021).
- La vue journalière `/planning/day/2026-08-25` et les écrans planning
scheduled/meters/consumables/admin-tasks/rules répondent 200.
- API anonyme : `/api/v1/status`, `/api/v1/equipments` et
`/api/v1/interventions` renvoient chacun 401 JSON avec un message
d'authentification, conformément au deny-by-default.
- Les listes pièces, services, contrats et formations ne contenaient pas de
lien de détail au moment du test ; le détail de l'entreprise ID 1 répond
200.
- Les POST vides avec CSRF valide sur réception, sortie et transfert restent
sur le formulaire en 200 ; l'inventaire n'offre aucune ligne d'action tant
qu'aucun emplacement n'est disponible. Les POST sans CSRF testés plus tôt
renvoient 400.
- Scénario stock sans salle : produit, référence, conditionnement, deux
emplacements et deux lots créés ; réception 2×5 L et 3×5 L réussie ; sortie
d'1 L et transfert de 5 L réussis. Le journal confirme que la sortie a
choisi `TEST_UI_LOT_EARLY` (DLU la plus proche), donc FEFO fonctionne sur ce
cas. Inventaire validé avec correction tracée ; `/cleaning/stock` répond
toutefois 500 après ces opérations (UI-022).
- Fiches papier : profil `TEST_UI_PROFIL_ENTRETIEN` créé puis fiche
`/cleaning/requests/print/1` vérifiée avec le personnel TEST_UI. Aucun
produit n'était autorisé sur les fiches car `request_enabled` est désactivé
par défaut ; ce point limite le test des lignes imprimées.
- Le champ métier `request_enabled` n'est exposé ni à la création ni à
l'édition d'un produit ; aucun produit n'est donc sélectionnable dans le
profil (UI-023).
- Sorties stock invalides (`-1` puis `999999`) : le formulaire reste en 200
avec message métier, sans mouvement supplémentaire ni stock négatif.
- Création d'un produit générique portant un nom déjà existant : le formulaire
reste en 200 et affiche « existe déjà », sans doublon détecté.
- Édition produit avec `stock_minimum=abc` : HTTP 500 (UI-024), alors que la
création gère ce cas avec un message d'erreur.
- Création d'une seconde référence commerciale portant le même nom : acceptée
sans avertissement, deux lignes apparaissent (UI-025).
- Vérification structurelle des formulaires : les labels produits/stock et
prévention sont visuellement présents mais non reliés par `for`/`id`, ajouté
en UI-026.
- L'étiquette du mouvement de réception `/cleaning/labels/1` répond 200 et
reprend le produit de test ; les identifiants sans mouvement retournent 404.
- Action prévention `TEST_UI_ACTION_SECURITE` créée puis testée avec les
statuts `en_cours`, invalide et `cloturee` ; le statut invalide redirige sans
modifier l'action et la clôture est persistée.
- Le formulaire d'habilitation accepte une date d'expiration antérieure à la
date d'émission (POST 302 sans erreur), ajouté en UI-027.
- Après cette soumission, aucun tableau d'habilitations n'est rendu sur
`/prevention/`, ajouté en UI-028.
2026-08-22 14:22:49 +02:00
- Les listes produits, références, mouvements et profils de demande ont été
inspectées : aucun champ de recherche, filtre ou pagination visible (UI-029).
- Transfert d'une quantité supérieure au stock : le formulaire reste en 200
avec message métier et aucun transfert supplémentaire.
- Document artificiel `test_document.pdf` téléversé sur l'intervention 1 :
téléchargement ID 1 répond 200, mais le détail ne l'affiche pas (UI-030).
- Téléversement d'un fichier `.exe` artificiel : redirection avec rejet et
aucun second document téléchargeable (ID 2 renvoie 404).
- Vérification responsive structurelle : les pages produits, stock,
prévention, planning et intervention contiennent la meta viewport et des
classes Bootstrap responsive ; le seul rendu multi-viewport visuel reste
celui déjà réalisé sur entreprises, faute de navigateur disponible dans
cette reprise.
- La prévision détaillée `/cleaning/forecast/1` répond 200 et affiche stock,
consommation, sécurité et commande ; la configuration globale a été
corrigée dans le dépôt local (UI-002), à revalider sur VM.
## Prochaine étape
Revalider la disponibilité, puis poursuivre les contrôles de formulaires,
responsive/accessibilité et les scénarios stock non destructifs ; les
scénarios dépendant d'une salle étaient bloqués par UI-003 et les 500 UI-001,
UI-002, UI-017 et UI-019 ; les correctifs sont maintenant dans le dépôt et
doivent être revalidés sur la VM.
## Passe de corrections locales P1 — 2026-08-22
État : correctifs implémentés dans le dépôt, revalidation VM requise.
Corrigés dans le code : UI-001, UI-002, UI-003, UI-012, UI-015, UI-016,
UI-017, UI-019, UI-022, UI-024 et UI-030.
Tests locaux ajoutés dans `tests/integration/test_ui_p1_regressions.py` et
exécutés avec les suites équipements, nettoyage et audit intervention.
À revalider sur VM : création salle avec bâtiments existants, trois pages
cleaning sur données `TEST_UI_*`, dashboard/liste avec relations nulles,
upload puis affichage d'un document, et visibilité des menus pour les profils
RBAC existants.
Dernière exécution locale ciblée : **16 passed** (`pytest` sur les quatre
fichiers concernés).
Suite complète locale : **117 passed, 1 failed, 1 error**. Le test échoué est
`test_gmao_config_caps_lookback_at_one_year`, hors périmètre de cette passe
(la configuration de contexte GMAO est explicitement exclue) ; son teardown
échoue également sur une contrainte `gmao_context.user_id` nulle. Aucun échec
des tests ciblés par les correctifs P1.