veza/apps/web/visual-tests
senke 8a0f008345 chore: playwright workflow, docs, rapports audit, visual-tests, tmt unit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:19:34 +01:00
..
baselines style(ui): pixel-perfect alignment for Sidebar, Header, Player via Spotify/Discord standard 2026-02-10 23:09:24 +01:00
current chore: playwright workflow, docs, rapports audit, visual-tests, tmt unit 2026-02-11 22:19:34 +01:00
diffs chore: playwright workflow, docs, rapports audit, visual-tests, tmt unit 2026-02-11 22:19:34 +01:00
reports chore: playwright workflow, docs, rapports audit, visual-tests, tmt unit 2026-02-11 22:19:34 +01:00
PHASE1_REPORT.md feat(web): UI premium Discord/Spotify-like — tokens, shadows, focus, layout 2026-02-08 17:15:58 +01:00
PHASE2_COMPARATIVE_REPORT.md feat(web): UI premium Discord/Spotify-like — tokens, shadows, focus, layout 2026-02-08 17:15:58 +01:00
PHASE3_CHANGELOG.md feat(web): UI premium Discord/Spotify-like — tokens, shadows, focus, layout 2026-02-08 17:15:58 +01:00
README.md feat(web): UI premium Discord/Spotify-like — tokens, shadows, focus, layout 2026-02-08 17:15:58 +01:00
VISUAL_AUDIT_REPORT.md feat(web): UI premium Discord/Spotify-like — tokens, shadows, focus, layout 2026-02-08 17:15:58 +01:00

Visual tests — pixel-accurate baseline & regression

Workflow design engineering : baseline → capture current → pixelmatch diff → report. Aucune modification visuelle sans capture avant/après et diff explicite.

Structure

visual-tests/
├── baselines/   # Référence approuvée (committée). Viewport fixe 1280×720, thème dark.
├── current/     # Captures de la branche en cours (générée par capture script).
├── diffs/       # Images de diff pixelmatch (baseline vs current).
├── reports/     # Rapport HTML + résumé des diffs.
└── PHASE1_REPORT.md  # Rapport visuel initial (hiérarchie, densité, alignements, contrastes).

Règles

  • Seuil pixelmatch : configurable via VISUAL_DIFF_THRESHOLD (défaut 0.1). Explicite dans les rapports.
  • Viewport : 1280×720 (desktop) pour les baselines. Breakpoints additionnels optionnels.
  • Thème : dark forcé pour reproductibilité (aligné avec lapp en prod).

Commandes

Commande Description
npm run visual:capture Playwright : capture écrans + composants → visual-tests/current/.
npm run visual:update Playwright : écrase les baselines → visual-tests/baselines/.
npm run visual:compare pixelmatch baselines vs current → diffs/ + rapport JSON/HTML dans reports/.
npm run visual:baseline Script Node (legacy) : capture → baselines/.
npm run visual:test Lance les tests Playwright de régression (même config).

Écrans et nommage

  • Full page : login, register, 404 (sans auth), dashboard, playlists, library (avec auth).
  • Composants : sidebar, header, player (locators ciblés sur /dashboard).
  • Nommage : {screen-name}-{viewport}-{theme}.png (ex. login-desktop-dark.png).

Méthode

  1. Baseline : une seule fois (ou après refonte validée) → npm run visual:baseline. Commit des fichiers dans baselines/.
  2. Avant une PR : npm run visual:capture puis npm run visual:compare. Vérifier reports/ et que les diffs correspondent aux changements voulus.
  3. CI : npm run visual:test compare les snapshots Playwright aux baselines (même viewport/config). Échec si dépassement du seuil de pixels.

Seuils

  • maxDiffPixels (Playwright) : VISUAL_MAX_DIFF_PIXELS (défaut 0 en local pour être strict).
  • pixelmatch threshold : VISUAL_DIFF_THRESHOLD (défaut 0.1). Au-delà de ce ratio (pixels différents / total), la diff est considérée comme une régression. Documenter dans chaque rapport si modifié.

Procédure de validation visuelle

  1. Lancer lapp : npm run dev (ou PLAYWRIGHT_BASE_URL pointant vers lapp).
  2. Capturer létat courant : npm run visual:capture → remplit visual-tests/current/.
  3. Comparer aux baselines : npm run visual:compare → génère diffs/ et reports/.
  4. Interpréter : ouvrir le rapport HTML dans reports/ ; vérifier que les écarts correspondent aux changements voulus.
  5. Mettre à jour les baselines (si changements validés) : npm run visual:update puis committer visual-tests/baselines/.

Les stories full layout (App/Layouts/DashboardLayout : Dashboard, Playlists, Library, Settings) peuvent servir de référence visuelle dans Storybook ; pour une régression automatisée, utiliser les tests Playwright (e2e/visual-complete.spec.ts).

Accessibilité (a11y)

Utiliser laddon a11y de Storybook sur les stories full layout et les composants critiques. Corriger les violations critiques (contraste, focus, labels). Vérifier la navigation clavier (Tab, Enter, Escape) sur Sidebar, Header, modales, player.

Git

  • Commiter : visual-tests/baselines/, visual-tests/README.md, visual-tests/PHASE1_REPORT.md.
  • Optionnel à ignorer : visual-tests/current/, visual-tests/diffs/, visual-tests/reports/ (générés localement ou en CI).