import puppeteer from "puppeteer"; const targetUrl = process.env.TEST_URL || "http://localhost:3000"; const gatekeeperPassword = process.env.GATEKEEPER_PASSWORD || "secret"; async function main() { console.log(`\n๐Ÿš€ Starting E2E Form Submission Check for: ${targetUrl}`); // Launch browser with KLZ pattern: use system chromium via env const browser = await puppeteer.launch({ headless: true, executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || process.env.CHROME_PATH || undefined, args: [ "--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage", "--disable-gpu", "--ignore-certificate-errors", "--disable-web-security", "--disable-features=IsolateOrigins,site-per-process", ], }); const page = await browser.newPage(); // Enable console logging from the page for debugging page.on("console", (msg) => console.log(` [PAGE] ${msg.text()}`)); page.on("pageerror", (err: Error) => console.error(` [PAGE ERROR] ${err.message}`), ); page.on("requestfailed", (req) => console.error( ` [REQUEST FAILED] ${req.url()} - ${req.failure()?.errorText}`, ), ); try { // Authenticate through Gatekeeper console.log(`\n๐Ÿ›ก๏ธ Authenticating through Gatekeeper...`); console.log(` Navigating to: ${targetUrl}`); const response = await page.goto(targetUrl, { waitUntil: "domcontentloaded", timeout: 60000, }); // Give Gatekeeper a second to redirect if needed console.log(` Waiting for potential Gatekeeper redirect...`); await new Promise((resolve) => setTimeout(resolve, 3000)); console.log(` Response status: ${response?.status()}`); console.log(` Response URL: ${response?.url()}`); const isGatekeeperPage = await page.$('input[name="password"]'); if (isGatekeeperPage) { await page.type('input[name="password"]', gatekeeperPassword); await Promise.all([ page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: 60000, }), page.click('button[type="submit"]'), ]); await new Promise((resolve) => setTimeout(resolve, 3000)); console.log(`โœ… Gatekeeper authentication successful!`); } else { console.log(`โœ… Already authenticated (no Gatekeeper gate detected).`); } // Basic smoke test console.log(`\n๐Ÿงช Testing page load...`); const title = await page.title(); console.log(`โœ… Page Title: ${title}`); if (title.toLowerCase().includes("mintel")) { console.log(`โœ… Basic smoke test passed!`); } else { throw new Error(`Page title mismatch: "${title}"`); } } catch (err: any) { console.error(`โŒ Test Failed: ${err.message}`); // Take a screenshot for debugging try { const screenshotPath = "/tmp/e2e-failure.png"; await page.screenshot({ path: screenshotPath, fullPage: true }); console.log(`๐Ÿ“ธ Screenshot saved to ${screenshotPath}`); } catch { /* ignore screenshot errors */ } console.log(` Current URL: ${page.url()}`); await browser.close(); process.exit(1); } await browser.close(); console.log(`\n๐ŸŽ‰ SUCCESS: E2E smoke test passed!`); process.exit(0); } main();