fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant #117
No reviewers
Labels
No labels
bug
chore
design
dx:ci
dx:database
dx:dotnet
dx:infra
dx:security
dx:tests
dx:ui
etape-1
etape-2
etape-3
etape-4
etape-5
etape-6
etape-7
feature
priority-high
priority-low
priority-medium
security
spec
tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nonobis/Heimdall!117
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/snapshots-lightbox-dialog"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Le bouton Fermer (et la croix) du lightbox de la page Snapshots ne répondait pas. Cause racine : le
MudDialogétait enveloppé dans un@if (_lightboxEvent is not null). Au clic sur Fermer,Visible=falsedétruisait le composant au lieu de le cacher → le dialog restait affiché par le MudDialogProvider mais orphelin, plus aucun bouton ne répondait.Changements
SnapshotsPage.razor:MudDialogsorti du@if— toujours rendu, visibilité pilotée uniquement par@bind-Visible="_showLightbox"(pattern MudBlazor officiel, déjà utilisé sur EventsPage/UsersPage/SitesPage/CamerasPage/GroupsPage/SettingsPage...). Contenu accédé via le null-forgiving!(rendu seulement quand le dialog est visible).src/Heimdall.Web: script de détection d'imbrication@if→<MudDialog— aucun autre MudDialog ne reste sous un@if(DiscoveriesPage, SiteDetail, AgentDetail, SettingsPage, EventsPage, CameraDetail, Profile, MainLayout, MudBlazorLayout... tous conformes).SnapshotsPage_FermerLightbox_LeDialogSeFerme+SnapshotsPage_LeDialogResteRenduApresFermeture(ce dernier échoue sur l'ancien pattern :FindComponents<MudDialog>()= 0 hors ouverture).Tickets liés (obligatoire)
Résultats des tests (obligatoire)
Heimdall.Web.Tests227/227 verts (dont 6 SnapshotsPage)Retours SonarQube (obligatoire)
CVE (obligatoire)
Checklist
fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant)main, à jourdotnet build0 erreur (solution complète, TreatWarningsAsErrors)dotnet test— suite Web 227/227 + RED→GREEN prouvé sur l'ancien patternLe pattern @if (_lightboxEvent is not null) { <MudDialog @bind-Visible> } détruisait le composant MudDialog au lieu de lui passer Visible=false au clic sur Fermer : le dialog restait affiché par le MudDialogProvider mais orphelin, plus aucun bouton ne répondait (issue #94). Le MudDialog est maintenant toujours rendu, la visibilité pilotée uniquement par @bind-Visible (pattern MudBlazor officiel, déjà utilisé sur EventsPage/UsersPage/SitesPage/...). Le contenu accède à l'événement via le null-forgiving '!' — il n'est rendu que quand le dialog est visible et OpenLightbox définit _lightboxEvent avant _showLightbox=true. Audit complet src/Heimdall.Web (script d'imbrication @if → MudDialog) : aucun autre MudDialog ne reste sous un @if. Tests bUnit ajoutés : - SnapshotsPage_FermerLightbox_LeDialogSeFerme - SnapshotsPage_LeDialogResteRenduApresFermeture (échoue sur l'ancien pattern : FindComponents<MudDialog>() = 0 hors ouverture)CI : échec non lié à cette PR (infra préexistante)
Le run #1978 a échoué sur Heimdall.E2E.Tests (
Chromium not found) et Heimdall.Infrastructure.Tests (connexion PostgreSQL/Testcontainers). Ces deux échecs touchent toutes les PR récentes (runs #1925, #1929, #1954...) et ne sont pas liés aux changements de cette PR (2 fichiers :.razorUI + tests bUnit).Faits vérifiés dans le log du job #4280 :
Heimdall.Web.Tests: compilé (Release) puis exécuté sans warning non-zero — les 227 tests passent, dont les 6 tests SnapshotsPage (3 existants + 2 nouveaux).Heimdall.E2E.Tests:FileNotFoundException: Chromium not found— malgrée2e-enabled: 'false'dans.forgejo/workflows/ci.yml. Cause probable : le templateci-fulla un défautexclude-test-projects: 'E2E'mais le workflow Heimdall ne le passe pas explicitement, et le filtre ne s'applique pas.Heimdall.Infrastructure.Tests: socket PostgreSQL indisponible (Testcontainers) — même échec sur les runs précédents.Vérification locale (worktree
fix/snapshots-lightbox-dialog) :dotnet buildsolution complète : 0 warning / 0 erreur (TreatWarningsAsErrors)dotnet test tests/Heimdall.Web.Tests: 227/227 vertsSnapshotsPage_LeDialogResteRenduApresFermetureéchoue sur l'ancien pattern (FindComponents<MudDialog>()= 0 hors ouverture) et passe avec le fix.Suggestion (hors scope de cette PR, à traiter séparément) : passer
exclude-test-projects: 'E2E'explicitement dans.forgejo/workflows/ci.ymlou corriger le défaut du template.🔍 Revue the-reviewer — Passe 1 (2026-08-14)
Statut : ❌ PR à corriger (code OK, CI rouge + branche pas à jour)
Code — ✅
SnapshotsPage.razor: sortie duMudDialoghors du@if— pattern MudBlazor officiel, cohérent avec les autres pages. Accès via!justifié par le commentaire (rendu seulement dialog visible). RAS.Tests — ✅
Heimdall.Web.Tests: 227/227 verts dans le run CI #1978, dont les 6 tests SnapshotsPage.CI — ❌ bloquant
Chromium not found, 32 tests) et Infrastructure.Tests (PostgreSQL/Testcontainers KO). Cause : l'action composite en cache exécute encore les E2E malgrée2e-enabled: 'false', et le service PostgreSQL n'est pas joignable — problème d'infra CI préexistant, non lié à cette PR (confirmé par le log :ci: command not found, E2E non filtrés).Conformité — ⚠️ à corriger
Fixes #94présent ✓ — ticket ouvert ✓.Sécurité — ✅
Actions requises
🔄 Mise à jour — Passe 2 (2026-08-14 ~18h10)
Nouveau commit 16:59
ci: re-trigger — gate SonarQube avec contexte PR: ajout de l'inputexclude-test-projects: 'E2E'dans.forgejo/workflows/ci.yml— correction partielle de l'anomalie CI signalée en Passe 1 (les E2E ne doivent plus tourner sur les PR). ✅Rapport QA de the-qa posté (15:29) — couvre la régression #94. ✅
État CI au dernier run : toujours rouge — mais l'échec n'est plus sur les E2E : le step sonar-dotnet ne trouve toujours pas
coverage.cobertura.xml(ReportGenerator « No report files specified ») puis le push image Docker est refusé (denied). Cause racine infra commune à toutes les PR nonobis, pas le code de cette PR. → mission the-devops en cours (cache runner + registry).Restent à traiter :
Anomalies de code : aucune nouvelle — la PR reste bonne sur le fond.
🔄 Mise à jour — Passe 3 (2026-08-14 ~20h30)
Nouveau commit depuis P2 : re-push du fix (
0ed99eceb3, même contenu — branche re-poussée à 20:00).Statut : ❌ dépend de #128 (CVE Trivy) — le code reste bon, la CI ne peut pas passer tant que #128 n'est pas mergée.
Actions mises à jour
🔄 Passe 4 (2026-08-14 ~23h30) — rebase 22h43 + run 2231
dc29c642),mergeable=true.context deadline exceeded) — infra runner.Statut : ⚠️ dépend de #128 + infra CI.
Actions
Rapport QA — fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant
1. Périmètre
2. Plan de tests
MudDialogdu lightbox Snapshots hors du@if (_lightboxEvent is not null)pour que « Fermer » (et la croix) fonctionnent —Visible=falsemasque au lieu de détruire le composant.FindComponents<MudDialog>()= 0 hors ouverture)3. Exécution
Tests unitaires / intégration
dotnet test tests/Heimdall.Web.TestsFermerLightbox_LeDialogSeFerme,LeDialogResteRenduApresFermeture). Vérifié localement sur la branche (run local :Passed! - Failed: 0, Passed: 227, Total: 227).FileNotFoundException: Chromium not found: l'ancien template en cache exécute les E2E malgrée2e-enabled: 'false'. Non lié à la PR.Tests E2E / UI (Playwright)
4. Coverage
ci: command not found, exitcode 141 — cache composite corrompu) → post_pr_summary « Aucun résultat de test trouvé ».5. Bugs / régressions
6. Croisement GlitchTip
7. Verdict
Résumé : 227/227 tests bUnit verts (vérifiés localement sur la branche), dont les 2 nouveaux tests couvrant la régression lightbox (RED→GREEN prouvé). La CI #1978 est rouge exclusivement pour des raisons d'infra préexistante (runner cache corrompu :
ci: command not found, E2E exécutés sans Chromium, PostgreSQL injoignable) — pas du fait de cette PR. La validation finale CI dépend de la réparation infra par the-devops ; la branche est 1 commit derrière main → rebase à prévoir. Re-vérification rapide après rebase + run CI sain, puis green light au merge.Rapport QA généré via la skill
qa-pipeline— the-qaa4d60e653f65285f2154744573ce5e2c73f09c5a2c73f09c5a0ed99eceb3Nettoyage branche + rebase (the-developer)
La branche a été rebasée sur main et nettoyée : retrait des 6 commits
ci: re-trigger/ci: re-runparasites et du fichierci-rerun-marker.txt(ancien mécanisme de relance CI, obsolète après la refonte multi-workflows).Contenu actuel de la PR : un seul commit
fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant(2 fichiers :SnapshotsPage.razor+SnapshotsPageTests.cs, +77/−24).Validation locale : build 0 erreur/0 warning, 957 tests verts (Web 227 dont 2 tests de régression #94, Domain 142, Application 391, Agent 197). Les suites Testcontainers (Infrastructure/Integration) ne tournent pas sur la machine locale (daemon Docker du LXC ne démarre pas les containers — problème connu, sans lien avec cette PR) ; la CI du runner Forgejo les validera.
0ed99eceb3dc29c642f5Rebase sur main + CI (the-developer)
Branche rebasée sur main (intègre la PR #118 mergée) — nouveau SHA
dc29c64, 1 commit, travail propre.Tests locaux : build 0 erreur, 243 tests Web verts (dont les 2 nouveaux tests bUnit lightbox), 1261 tests verts au total (hors E2E Playwright, non installé localement).
CI (run #354) : le run précédent (#347) montrait tous les tests verts — léchec est exclusivement le scan Trivy bloquant sur 4 CVE de dépendances de limage (AutoMapper, Microsoft.OpenApi, Newtonsoft.Json, SQLitePCLRaw), problème indépendant de cette PR, déjà traité par la PR #128 (issue #127). Dès que #128 est mergée, un re-run de la CI suffira pour passer au vert.