17 lines
3.4 KiB
JavaScript
17 lines
3.4 KiB
JavaScript
// Verify included opportunity consumers, rather than repeat A/B or QA18 authentication.
|
|
const {start,assert,DIR,path,sanitized}=require('./portal-functional-qa-lib.cjs');
|
|
void(async()=>{const q=await start('functional-accessibility-chromium-20261011');let page,ctx;
|
|
try{({page,ctx}=await q.context('promoter'));await q.login(page,'promoter');const affected=['/minhas-oportunidades','/minhas-oportunidades/32/view'];const scoped=process.env.FUNCTIONAL_A11Y_SCOPE==='affected';q.proof.pages=scoped?(q.prior.pages||[]).filter(p=>!affected.includes(p.route)):[];q.proof.reused_unchanged_routes=scoped;
|
|
for(const route of scoped?affected:['/minhas-oportunidades','/minhas-oportunidades/15/edit','/minhas-oportunidades/15/resources',...[30,31,32,33,34,35].map(id=>`/minhas-oportunidades/${id}/view`)]) {
|
|
q.phase('Keyboard, labels and reading states '+route);assert.equal((await q.open(page,route)).status(),200);await page.locator('main').first().waitFor();
|
|
await page.addScriptTag({path:path.join(DIR,'qa-a11y-toolkit/package/axe.min.js')});
|
|
const report=await page.evaluate(async()=>{const r=await axe.run(document,{runOnly:{type:'tag',values:['wcag2a','wcag2aa','wcag21aa','best-practice']}});return {violations:r.violations.map(v=>({id:v.id,impact:v.impact,help:v.help,nodes:v.nodes.map(n=>({target:n.target,failureSummary:n.failureSummary}))})),incomplete:r.incomplete.map(v=>({id:v.id,nodes:v.nodes.map(n=>n.target)})),passes:r.passes.length};});
|
|
const item={route,...report};q.proof.pages.push(item);q.save();
|
|
await page.evaluate(()=>{document.activeElement?.blur();window.scrollTo(0,0)});let skip=false;
|
|
for(let i=0;i<12;i++){await page.keyboard.press('Tab');const link=page.locator('a[href="#portal-content"]');if(await link.evaluate(e=>e===document.activeElement)){await page.keyboard.press('Enter');assert(await page.locator('#portal-content').evaluate(e=>e===document.activeElement));skip=true;break;}}assert(skip,'Skip link must be keyboard reachable');item.keyboard_skip=true;
|
|
if(route.endsWith('/edit')){const title=page.locator('[id="canonical.official_title"]');await title.focus();await page.keyboard.press('Tab');item.next_from_title=await page.evaluate(()=>({id:document.activeElement.id,tag:document.activeElement.tagName,outline:getComputedStyle(document.activeElement).outlineWidth}));assert.notEqual(item.next_from_title.tag,'BODY');}
|
|
for(const width of [320,390]){await page.setViewportSize({width,height:900});const dimensions=await page.evaluate(()=>({width:innerWidth,scroll:document.documentElement.scrollWidth}));item['viewport_'+width]={...dimensions,overflow:dimensions.scroll>width+1};assert(!item['viewport_'+width].overflow,'Horizontal page overflow at '+route);}
|
|
await q.shot(page,'included-'+q.proof.pages.length,false);await page.setViewportSize({width:1440,height:1000});q.save();}
|
|
q.proof.checks={keyboard_skip:q.proof.pages.every(p=>p.keyboard_skip),automated_violations:q.proof.pages.reduce((n,p)=>n+p.violations.length,0),mobile_320_390:true,screen_reader_and_real_devices_pending:true};q.proof.result=q.proof.checks.automated_violations?'violations_found':'passed';q.save();console.log(JSON.stringify({result:q.proof.result,checks:q.proof.checks,pages:q.proof.pages.map(p=>({route:p.route,violations:p.violations}))}));
|
|
}catch(e){q.proof.result='failed';q.proof.failure=sanitized(e);q.save();console.log(JSON.stringify({result:'failed',failure:q.proof.failure}));process.exitCode=1;}finally{if(ctx)await ctx.close();await q.browser.close();}})();
|