test: implement gatekeeper resilience standards for e2e forms
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 7s
Build & Deploy / 🧪 QA (push) Successful in 1m11s
Build & Deploy / 🏗️ Build (push) Successful in 2m27s
Build & Deploy / 🚀 Deploy (push) Successful in 16s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 3m55s
Build & Deploy / 🔔 Notify (push) Successful in 3s
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 7s
Build & Deploy / 🧪 QA (push) Successful in 1m11s
Build & Deploy / 🏗️ Build (push) Successful in 2m27s
Build & Deploy / 🚀 Deploy (push) Successful in 16s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 3m55s
Build & Deploy / 🔔 Notify (push) Successful in 3s
This commit is contained in:
@@ -5,9 +5,16 @@ import * as cheerio from 'cheerio';
|
||||
const targetUrl = process.argv[2] || process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
|
||||
const gatekeeperPassword = process.env.GATEKEEPER_PASSWORD || 'klz2026';
|
||||
|
||||
// Utility for hardcoded delays
|
||||
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
|
||||
async function main() {
|
||||
console.log(`\n🚀 Starting E2E Form Submission Check for: ${targetUrl}`);
|
||||
|
||||
// 0. Settlement Delay: Wait for deployment to settle (sync containers/Varnish)
|
||||
console.log(`⏳ Waiting 5s for deployment settlement...`);
|
||||
await delay(5000);
|
||||
|
||||
// 1. Fetch Sitemap to discover the contact page and a product page
|
||||
const sitemapUrl = `${targetUrl.replace(/\/$/, '')}/sitemap.xml`;
|
||||
let urls: string[] = [];
|
||||
@@ -60,8 +67,15 @@ async function main() {
|
||||
console.log(`\n🕷️ Launching Puppeteer Headless Engine...`);
|
||||
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'],
|
||||
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();
|
||||
@@ -73,19 +87,28 @@ async function main() {
|
||||
});
|
||||
|
||||
// 3. Authenticate through Gatekeeper login form
|
||||
console.log(`\n🛡️ Authenticating through Gatekeeper...`);
|
||||
try {
|
||||
// Navigate to a protected page so Gatekeeper redirects us to the login screen
|
||||
await page.goto(contactUrl, { waitUntil: 'networkidle0', timeout: 30000 });
|
||||
// RELAXED NAVIGATION: Use domcontentloaded to handle rapid redirects
|
||||
await page.goto(contactUrl, { waitUntil: 'domcontentloaded', timeout: 60000 });
|
||||
|
||||
// BOUNCE BUFFER: Wait for potential Gatekeeper redirect chain to settle
|
||||
console.log(` Waiting for potential Gatekeeper redirect bounce...`);
|
||||
await delay(3000);
|
||||
|
||||
// Check if we landed on the Gatekeeper login page
|
||||
const isGatekeeperPage = await page.$('input[name="password"]');
|
||||
if (isGatekeeperPage) {
|
||||
console.log(` Gatekeeper gate detected. Logging in...`);
|
||||
await page.type('input[name="password"]', gatekeeperPassword);
|
||||
await Promise.all([
|
||||
page.waitForNavigation({ waitUntil: 'networkidle0', timeout: 30000 }),
|
||||
page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
|
||||
page.click('button[type="submit"]'),
|
||||
]);
|
||||
|
||||
// LOGIN SYNC BUFFER: Let the authenticated session settle
|
||||
console.log(` Authenticating session...`);
|
||||
await delay(3000);
|
||||
console.log(`✅ Gatekeeper authentication successful!`);
|
||||
} else {
|
||||
console.log(`✅ Already authenticated (no Gatekeeper gate detected).`);
|
||||
|
||||
Reference in New Issue
Block a user