Skip to content

Capture du sélecteur visuel en back-office - #119

Merged
PrestaEdit merged 10 commits into
devfrom
feat/bo-picker-snapshot
Oct 6, 2026
Merged

PrestaEdit merged 10 commits into
devfrom
feat/bo-picker-snapshot

Conversation

@PrestaEdit

Copy link
Copy Markdown
Contributor

Objectif

Permettre à l'app d'ouvrir, pour son sélecteur visuel, la même page back-office que le run (connexion employé, tableau de bord, entrée du menu, ou page de connexion déconnectée), puis de la capturer — sans dépasser les 60 s de nginx.

Changements

  • PageSnapshot::captureCurrent(object $page, int $timeoutMs = 15000) : capture l'onglet courant. take() navigue puis l'appelle (comportement inchangé).
  • Plafonds réglables par page, défauts du run inchangés :
    • CommonPage::$navigationTimeout (null = 30 s chrome-php) pour goToUrl, BackOfficePage::goToPage, goToMenu ;
    • Login\Page::$loginOutcomeTimeout (60 s) et $loginOutcomeSeen.
  • VisualTestsSuite::openBackOfficeCheckpoint(array $checkpoint, int $loginTimeoutMs = 25000, int $menuTimeoutMs = 15000): string
    • passe par le code du run (normalize, ensureBackOfficeLogin, goToPage('index'), goToMenu) ;
    • échéance globale = login + menu ; chaque étape plafonnée par ce qui reste ; BackOfficeTimeoutException sinon ;
    • renvoie le chemin + contrôleur, sans jeton ; messages d'erreur sans jeton ni user:pass@.
  • VisualTestsSuite::closeBackOfficeSession(int $timeoutMs = 5000) : déconnexion, ne lève jamais.
  • BackOfficeTimeoutException (étend TimeoutException).
  • ensureBackOfficeLogin() : même message, cause conservée en previous.

Pour l'app (consommateur)

  • Attraper BackOfficeTimeoutException avant \RuntimeException.
  • getPrevious() peut contenir l'URL brute (jeton) : ne jamais l'afficher ni la journaliser côté utilisateur.
  • Lire TestsSuite::getPage() après openBackOfficeCheckpoint (l'onglet peut être recréé).
  • Une instance de suite par capture. captureCurrent remonte les exceptions chrome-php brutes et modifie l'onglet (animations figées, défilement en haut).

Tests

593 tests verts en PHP 8.4 et 8.1 (+41). Aucun test ne lance Chrome : doubles avec horloge factice pour le budget.

Spec : docs/superpowers/specs/2026-10-06-bo-picker-snapshot-design.md — plan : docs/superpowers/plans/2026-10-06-bo-picker-snapshot.md.

🤖 Generated with Claude Code

PrestaEdit and others added 10 commits October 6, 2026 14:50
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…te ; take() l'appelle après sa navigation

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… par page, défauts du run inchangés

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nt comme le run, sous plafonds ; closeBackOfficeSession referme la session

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… sans jeton ni identifiants d'URL

Échéance = début + plafond de connexion + plafond de navigation ; chaque étape
reçoit le reste, et n'est pas lancée faute de temps. Messages de délai neutres ;
net::ERR_TIMED_OUT traité comme un délai.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…us un budget global

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dés masqués, issue de connexion remise à zéro

- openBackOfficeCheckpoint : l'issue de la connexion réserve aussi les 5 s
  d'isLoggedIn() ; formulaire envoyé seulement s'il reste 16 s.
- Masquage des jetons encodés (%26token%3D, %3F_token%3D) et en entité HTML,
  sans toucher un « @ » de requête.
- Login\Page::login() remet loginOutcomeSeen à null en tête.
- Doubles fidèles aux plafonds ; délais de captureCurrent()/take() vérifiés ;
  docblocks (captureCurrent, CommonPage::$navigationTimeout).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…connexion réservé)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gin, session reprise ; suivi des tâches

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@PrestaEdit
PrestaEdit merged commit da93bc1 into dev Oct 6, 2026
13 checks passed
@PrestaEdit
PrestaEdit deleted the feat/bo-picker-snapshot branch October 7, 2026 08:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant