Files

12 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

2026-09-24 16:10:08 +03:00
const assert=require('node:assert/strict');
(async()=>{const browser=await require('./support/browser.cjs').launchBrowser();try{
2026-09-24 14:35:05 +03:00
for(const [user,names] of [['alice',['Acme Engineering','Customer Support','Regional Platform','Commerce Operations']],['bob',['Acme Engineering','Regional Platform']],['carol',['Acme Engineering','Customer Support','Commerce Operations']],['dave',['Acme Engineering']],['erin',['Acme Engineering']]]){
const page=await browser.newPage();const errors=[];page.on('pageerror',e=>errors.push(e.message));await page.goto('http://127.0.0.1:3000/');await page.getByLabel('Username',{exact:true}).fill(user);await page.getByLabel('Password',{exact:true}).fill('meguri-demo-only');await page.getByRole('button',{name:'Sign in',exact:true}).click();await page.waitForFunction(()=>window.Alpine&&Alpine.$data(document.body).workspace);
const teams=await page.evaluate(()=>Alpine.$data(document.body).directoryState.workspaces);assert.deepEqual(teams.map(t=>t.name).filter(n=>['Acme Engineering','Customer Support','Regional Platform','Commerce Operations'].includes(n)).sort(),names.sort());
if(user==='alice'){const schedules=await page.evaluate(()=>Alpine.$data(document.body).doc.schedules);assert.equal(schedules.filter(s=>s.type==='priority').length,6);assert(schedules.filter(s=>s.type==='priority').every(s=>s.participants.length>=2&&s.participants.length<=3));assert.equal(schedules.find(s=>s.type==='rotation').participants.length,5);}
if(user==='alice')for(const name of ['Regional Platform','Commerce Operations']){
const team=teams.find(t=>t.name===name);await page.goto(`http://127.0.0.1:3000/?view=configuration&workspace=${team.id}`);await page.waitForFunction(()=>{const a=Alpine.$data(document.body);return a.generationResult&&!a.generationLoading;});assert.deepEqual(await page.evaluate(()=>Alpine.$data(document.body).generationResult.issues),[]);assert(await page.locator('.resource-row.generated-resource').count()>=10);await page.getByRole('button',{name:name==='Regional Platform'?'Edit rule Region → enabled services':'Edit rule Product → service tier',exact:true}).click();await page.getByRole('dialog').waitFor();await page.screenshot({path:`test-results/demo-${team.name.startsWith('Regional')?'regional':'tiers'}.png`,fullPage:true});await page.getByRole('dialog').getByRole('button',{name:'Cancel',exact:true}).click();
}
assert.deepEqual(errors,[]);await page.close();
}console.log('PASS four demo workspaces, advanced previews/editors, scoped Alice/Bob/Carol access');
}finally{await browser.close();}})().catch(e=>{console.error(e);process.exitCode=1;});