gmao/docs/ui-audit/PROGRESS.md
root cddcdb70d7
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
docs(audit): consigner les résultats des tests locaux
2026-08-22 13:12:16 +00:00

191 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.
- 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.
- 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.