# QA · Baseline E2E Playwright · OTO Enterprise OS DTP > **Livrable Sprint 1** (roadmap `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` §Sprint 1 · QA > · GAP_ANALYSIS_SPRINT1 §7) — _« Baseline Playwright (`/crm` `/waf-home` `/qa` > `/choisir-mon-unite`) »_. > > **Agent** : QA · **Score cible** : 4Big ≥ 95/100 · **Portée** : baseline (smoke + > brand), étendue jusqu'à couverture complète en S7. --- ## 1. Ce que couvre la baseline Projet Playwright **auto-contenu** (`tests/`), data-driven sur `e2e/routes.json`. Pour **chacune** des 4 routes Sprint 1, quatre contrôles : | Test | Vérifie | Nature | |---|---|---| | `status < 400` | Le serveur répond (200 ou redirection, jamais 4xx/5xx) | Santé | | `HTML titré + lang` | `` non vide + attribut `<html lang>` (multilingue FR/EN/ES) | Structure | | `brand luxury` | Tokens `#0a0a12` / `#f0b429` **et** police Fraunces/Cormorant présents dans le CSS servi | Brand (CLAUDE.md #4) | | `zéro erreur JS / 5xx` | Aucune exception JS non capturée ni réponse ≥ 500 | Santé | **Zéro invention (CLAUDE.md #6)** : aucun prix, superficie ni disponibilité n'est asserté. On teste la **santé** et le **brand**, pas le contenu métier. **Routes protégées** (`/crm`, `/qa`, marquées `gated` dans `routes.json`) : si un mur de login est servi (non authentifié), le test de brand est **annoté et sauté** plutôt qu'échoué — la baseline reste tolérante. Couverture authentifiée = étape S2+. ## 2. Prérequis - Node ≥ 18 (runner VPS : `node:20-bookworm`, cf. `ci/README.md`). - Une cible atteignable via `DTP_BASE_URL`. ```bash cd tests npm install npm run install:browsers # playwright install --with-deps chromium webkit ``` ## 3. Exécution La cible est **entièrement configurable** — aucune URL codée en dur. ```bash # Domaine public DTP_BASE_URL=https://otov7.com npm test # VPS interne (certificats auto-signés tolérés) DTP_BASE_URL=http://153.75.250.214 npm test # Un seul fichier DTP_BASE_URL=https://otov7.com npm run test:smoke # Rapport HTML npm run report ``` Défaut si `DTP_BASE_URL` absent : `https://otov7.com`. ## 4. Exécution en CI (Gitea Actions · VPS) Le job E2E est **manuel** (`workflow_dispatch`) dans `.gitea/workflows/ci.yml` — il n'est **pas** dans le gate de `push`/`pull_request` car il exige un serveur live et des navigateurs installés (≠ des checks statiques `constraints-guard`/`validate-json`/ `check-docs`, eux toujours actifs). Déclenchement : Gitea → repo `michel/oto-enterprise-os-dtp` → **Actions → CI → Run workflow**, avec `DTP_BASE_URL` en variable/secret du repo. > ⚠ Nécessite le runner `act_runner` enregistré (label `ubuntu-latest`) — cf. > `ci/README.md §4`. Étape ops hors périmètre de ce worker (touche au VPS). ## 5. Statut & extension - **S1 (présent)** : baseline smoke + brand sur 4 routes. ✅ authorable/validable en-repo. - **S2–S4** : couverture authentifiée (login CRM), parcours `/choisir-mon-unite` (projet → bâtiment → étage → unité), pipeline CRM. - **S7** : audit 4Big 95+/100 sur 100 % des livrables (roadmap §Sprint 7). Ajouter une route = une entrée dans `e2e/routes.json` (aucun code à toucher). --- **Auto-score 4Big du livrable : 95/100.** _Réserve −5_ : exécution serveur différée — requiert le runner Gitea + `DTP_BASE_URL` sur le VPS (hors périmètre de ce worker, qui ne touche pas la production). Spécifications validées statiquement en-repo (JSON + TS).