Skip to content

Sélecteur visuel : environnement et connexion au plus juste - #121

Merged
PrestaEdit merged 12 commits into
devfrom
feat/picker-environment
Oct 7, 2026
Merged

PrestaEdit merged 12 commits into
devfrom
feat/picker-environment

Conversation

@PrestaEdit

Copy link
Copy Markdown
Contributor

Objectif

Le sélecteur visuel de l'app doit capturer une boutique protégée (Basic Auth, en-têtes, cookies) comme le run, et la connexion BO du sélecteur ne doit plus gaspiller son budget.

Changements

  • TestsSuite::applyEnvironment(object $browser, object $page, ?string $defaultUrl = null) : applique au navigateur donné, dans l'ordre du run, la Basic Auth (PRESTAFLOW_BASIC_USER/_PASS), PRESTAFLOW_EXTRA_HEADERS et PRESTAFLOW_COOKIES. before() garde exactement son comportement (les méthodes protégées preset* restent et délèguent aux mêmes étapes).
  • TestsSuite::clearEnvironment() : vide $extraHttpHeaders (ne fermait jamais d'un job à l'autre dans un worker persistant).
  • PageSnapshot::take() applique l'environnement à sa page dédiée avant la navigation ; il part d'en-têtes vides et rétablit ceux du run en sortie, même en erreur.
  • Cookies sans domain : le domaine est déduit de leur url, sinon (dans take()) de l'URL capturée. Auparavant, chrome-php prenait le host de about:blank et le cookie était perdu sans message.
  • Login\Page::$loginOutcomeDeadline : échéance de l'attente de l'issue de connexion, bornée par $loginOutcomeTimeout. openBackOfficeCheckpoint() la pose au lieu de réserver 10 s fixes au rechargement ; le formulaire part dès que 6 s restent.
  • Nettoyage : redactUrls() masque aussi les jetons doublement encodés ; docblock de UNSTABLE_WARNING à sa place ; README « Visual picker API ».
  • Robustesse : pas de STDERR hors CLI (php-fpm) ; aucune propriété dynamique créée sur une page de connexion cliente qui n'hérite pas de Login\Page.

Changement visible côté run

Un cookie de PRESTAFLOW_COOKIES avec url mais sans domain est désormais posé (il était refusé silencieusement). Rien d'autre ne change pour le run : sans échéance, login() attend toujours jusqu'à 60 s.

Tests

624 tests verts en PHP 8.4 et 8.1 (1 ignoré en 8.1 : le test hors CLI a besoin de php-cgi). Aucun test ne lance Chrome.

Spec : docs/superpowers/specs/2026-10-07-picker-environment-design.md — plan : docs/superpowers/plans/2026-10-07-picker-environment.md.

🤖 Generated with Claude Code

PrestaEdit and others added 12 commits October 7, 2026 10:09
…oyage

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oyage

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… et cookies du run à un navigateur donné ; clearEnvironment

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ur, idempotence, docblock de clearEnvironment

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t la navigation

Un cookie PRESTAFLOW_COOKIES sans domain prend le host de son url, sinon
celui de l'URL par défaut d'applyEnvironment() (l'URL capturée pour take()) :
sur about:blank, chrome-php en tirerait un domaine nul refusé par CDP.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ookie sur l'URL par défaut

take() part d'un TestsSuite::$extraHttpHeaders vide et le rétablit dans son
finally (même en exception) : ni héritage des en-têtes d'un run en cours, ni
fuite d'Authorization vers la suite du worker. Une url de cookie
inexploitable (sans schéma, malformée, non chaîne) passe à l'URL par défaut,
sans warning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…isolation des en-têtes dans take()

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… plafond = temps restant après le rechargement

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…squ'à l'échéance, envoi dès 6 s restantes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…E_WARNING à sa place, README de l'API du sélecteur

Attente de l'issue de connexion bornée par loginOutcomeTimeout même avec une
échéance (horloges divergentes) ; docblocks de PAGE_RELOAD_MS (connexion AJAX
sur PS 1.7/8) et de VisualTestsSuite::nowMs().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s échéance ; README : exceptions chrome-php brutes de la capture

capBackOfficeWaits() et la pose de l'échéance n'écrivent loginOutcomeSeen et
loginOutcomeDeadline que si la page de connexion les déclare (PHP 8.2+ :
propriété dynamique dépréciée). README : captureCurrent() et take() laissent
remonter les exceptions chrome-php (\Exception), catch final dans l'exemple.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@PrestaEdit
PrestaEdit merged commit c609d0e into dev Oct 7, 2026
13 checks passed
@PrestaEdit
PrestaEdit deleted the feat/picker-environment branch October 7, 2026 15:43
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