fix(e2e): implement aggressive asset-interception for cache-busting
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🧪 QA (push) Successful in 1m14s
Build & Deploy / 🏗️ Build (push) Successful in 2m26s
Build & Deploy / 🚀 Deploy (push) Successful in 15s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 4m2s
Build & Deploy / 🔔 Notify (push) Successful in 3s
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🧪 QA (push) Successful in 1m14s
Build & Deploy / 🏗️ Build (push) Successful in 2m26s
Build & Deploy / 🚀 Deploy (push) Successful in 15s
Build & Deploy / 🧪 Post-Deploy Verification (push) Failing after 4m2s
Build & Deploy / 🔔 Notify (push) Successful in 3s
This commit is contained in:
@@ -12,8 +12,8 @@ async function main() {
|
|||||||
console.log(`\n🚀 Starting E2E Form Submission Check for: ${targetUrl}`);
|
console.log(`\n🚀 Starting E2E Form Submission Check for: ${targetUrl}`);
|
||||||
|
|
||||||
// 0. Settlement Delay: Wait for deployment to settle (sync containers/Varnish)
|
// 0. Settlement Delay: Wait for deployment to settle (sync containers/Varnish)
|
||||||
console.log(`⏳ Waiting 5s for deployment settlement...`);
|
console.log(`⏳ Waiting 10s for deployment settlement...`);
|
||||||
await delay(5000);
|
await delay(10000);
|
||||||
|
|
||||||
// 1. Fetch Sitemap to discover the contact page and a product page
|
// 1. Fetch Sitemap to discover the contact page and a product page
|
||||||
const sitemapUrl = `${targetUrl.replace(/\/$/, '')}/sitemap.xml`;
|
const sitemapUrl = `${targetUrl.replace(/\/$/, '')}/sitemap.xml`;
|
||||||
@@ -80,6 +80,24 @@ async function main() {
|
|||||||
|
|
||||||
const page = await browser.newPage();
|
const page = await browser.newPage();
|
||||||
|
|
||||||
|
// Enable Request Interception to force cache-busting on ALL static assets
|
||||||
|
await page.setRequestInterception(true);
|
||||||
|
page.on('request', (request) => {
|
||||||
|
const url = request.url();
|
||||||
|
// Intercept Next.js chunks and data to bypass Varnish 404-caching
|
||||||
|
if (
|
||||||
|
(url.includes('/_next/static/') || url.includes('/_next/data/')) &&
|
||||||
|
!url.includes('?cb=') &&
|
||||||
|
!url.includes('&cb=')
|
||||||
|
) {
|
||||||
|
const buster = `cb=${Date.now()}`;
|
||||||
|
const newUrl = url.includes('?') ? `${url}&${buster}` : `${url}?${buster}`;
|
||||||
|
request.continue({ url: newUrl });
|
||||||
|
} else {
|
||||||
|
request.continue();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let chunkErrorsDetected = false;
|
let chunkErrorsDetected = false;
|
||||||
page.on('console', (msg) => {
|
page.on('console', (msg) => {
|
||||||
const text = msg.text();
|
const text = msg.text();
|
||||||
@@ -110,7 +128,7 @@ async function main() {
|
|||||||
|
|
||||||
// First attempt
|
// First attempt
|
||||||
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
|
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
|
||||||
await delay(2000); // Allow initial JS execution
|
await delay(3000); // Allow initial JS execution
|
||||||
|
|
||||||
if (chunkErrorsDetected) {
|
if (chunkErrorsDetected) {
|
||||||
const cbUrl = `${url}${url.includes('?') ? '&' : '?'}cb=${Date.now()}`;
|
const cbUrl = `${url}${url.includes('?') ? '&' : '?'}cb=${Date.now()}`;
|
||||||
@@ -120,7 +138,7 @@ async function main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Wait for network to settle slightly
|
// Wait for network to settle slightly
|
||||||
await page.waitForNetworkIdle({ idleTime: 500, timeout: 10000 }).catch(() => {});
|
await page.waitForNetworkIdle({ idleTime: 1000, timeout: 10000 }).catch(() => {});
|
||||||
};
|
};
|
||||||
|
|
||||||
// 3. Authenticate through Gatekeeper login form
|
// 3. Authenticate through Gatekeeper login form
|
||||||
|
|||||||
Reference in New Issue
Block a user