← back to Marketing Command Center

scripts/verify-fix.js

34 lines

// Timing-robust race test. Rapid-nav a sequence, land on a target panel, then POLL
// up to 10s for it to render. "Blank" = still 0 cards after 10s (genuine bug, not slow).
// Compare UNFIXED live vs FIXED proxy on identical logic.
const { chromium } = require('playwright');
const BASE = process.env.MCC_BASE || 'https://marketing.designerwallcoverings.com';
const LABEL = 'Streams Board';
const SEQ = ['Social Scheduler', 'Composer', 'Marketing Calendar', 'Streams Board', 'Suggested Copy', 'Engine', 'Campaign Templates'];
async function cards(page){return await page.evaluate(()=>{let n=0;document.querySelectorAll('.bd-card,[class*="card"],article').forEach(e=>{const r=e.getBoundingClientRect();if(r.width>40&&r.height>20)n++;});return n;});}
async function landAndPoll(page){
  // rapid fire whole sequence at 180ms (forces interleave), no settle
  for(const l of SEQ){ try{const el=page.locator('a',{hasText:new RegExp(l,'i')}).first();if(await el.count())await el.click({timeout:3000});}catch{} await page.waitForTimeout(180); }
  // land firmly on target once more, then POLL up to 10s
  try{await page.locator('a',{hasText:new RegExp(LABEL,'i')}).first().click();}catch{}
  const title=await page.evaluate(()=>document.querySelector('#paneltitle')?.innerText||'');
  let n=0,t0=Date.now();
  while(Date.now()-t0<10000){ n=await cards(page); if(n>0)break; await page.waitForTimeout(400); }
  return {title:title.trim(),cards:n,ms:Date.now()-t0};
}
(async()=>{
  let blank=0;
  for(let trial=1;trial<=4;trial++){
    const b=await chromium.launch();
    const ctx=await b.newContext({viewport:{width:1600,height:900},httpCredentials:{username:'admin',password:'DW2024!'}});
    const page=await ctx.newPage();
    await page.goto(BASE+'/',{waitUntil:'domcontentloaded'}); await page.waitForTimeout(2500);
    const r=await landAndPoll(page);
    const isBlank=r.cards===0;
    if(isBlank)blank++;
    console.log(`trial${trial}: land="${r.title}" cards=${r.cards} settledIn=${r.ms}ms ${isBlank?'BLANK (stayed 0 after 10s)':'rendered'}`);
    await ctx.close(); await b.close();
  }
  console.log(`\n${BASE}\n=> blank ${blank}/4 trials`);
})().catch(e=>{console.error('FATAL',e);process.exit(1);});