//go:build e2e && live package e2e import ( "os" "os/exec" "path/filepath" "testing" "time" ) // runBrowserScript shells out to a Playwright .mjs harness under test/e2e/playwright. // It gates on CAPTCHA_E2E_LIVE=1, requires `node` and an installed Playwright Chromium, // inherits the ambient CAPTCHA_LLM_* gateway config, and asserts a clean (exit 0) run. func runBrowserScript(t *testing.T, script string) { t.Helper() if os.Getenv("CAPTCHA_E2E_LIVE") != "1" { t.Skip("CAPTCHA_E2E_LIVE != 1; skipping live browser e2e") } if os.Getenv("CAPTCHA_LLM_PROVIDER") == "" || os.Getenv("CAPTCHA_LLM_MODEL") == "" { t.Skip("CAPTCHA_LLM_PROVIDER / CAPTCHA_LLM_MODEL not set; skipping live browser e2e") } if _, err := exec.LookPath("node"); err != nil { t.Skip("node not found on PATH; skipping live browser e2e") } if !chromiumInstalled() { t.Skip("Playwright Chromium not installed (run: npx playwright install chromium); skipping") } // cwd is test/e2e so the script path "playwright/