53 lines
3.5 KiB
JavaScript
53 lines
3.5 KiB
JavaScript
const assert=require('node:assert/strict');
|
|||
|
|
const fs=require('node:fs');
|
||
|
|
const {launchBrowser}=require('./support/browser.cjs');
|
||
|
|
const base=process.env.MEGURI_BROWSER_URL||'http://127.0.0.1:3000';
|
||
|
|
assert(['localhost','127.0.0.1'].includes(new URL(base).hostname));
|
||
|
|
(async()=>{
|
||
|
|
const browser=await launchBrowser();
|
||
|
|
try {
|
||
|
|
const page=await browser.newPage({locale:'en-US',viewport:{width:1280,height:1000}});
|
||
|
|
const errors=[];page.on('pageerror',e=>errors.push(e.message));
|
||
|
|
const username='account-person-'+Date.now(),email=username+'@example.com';
|
||
|
|
await page.goto(base);
|
||
|
|
await page.getByRole('button',{name:'New here? Create an account'}).click();
|
||
|
|
await page.getByLabel('Username',{exact:true}).fill(username);
|
||
|
|
await page.getByLabel('Display name',{exact:true}).fill('Account person');
|
||
|
|
await page.getByLabel('Password',{exact:true}).fill('local-browser-test-password');
|
||
|
|
const emailInput=page.getByLabel('Email address',{exact:true});
|
||
|
|
assert.equal(await emailInput.evaluate(e=>e.required),true);
|
||
|
|
await page.getByRole('button',{name:'Create account',exact:true}).click();
|
||
|
|
assert.equal(await emailInput.evaluate(e=>e.validity.valueMissing),true);
|
||
|
|
await emailInput.fill(email.toUpperCase());
|
||
|
|
await page.getByRole('button',{name:'Create account',exact:true}).click();
|
||
|
|
await page.getByRole('button',{name:'New workspace',exact:true}).click();
|
||
|
|
const dialog=page.getByRole('dialog');
|
||
|
|
await dialog.getByLabel('Name',{exact:true}).fill('Account identity');
|
||
|
|
await dialog.getByRole('button',{name:'Save changes',exact:true}).click();
|
||
|
|
await dialog.waitFor({state:'hidden'});
|
||
|
|
const state=await page.evaluate(()=>{const a=Alpine.$data(document.body);return {user:a.user,person:a.doc.people.find(p=>p.id===a.user.id)};});
|
||
|
|
assert.equal(state.user.email,email);
|
||
|
|
assert.equal(state.user.user_id,state.user.id);
|
||
|
|
assert.equal(state.person.email,email);
|
||
|
|
assert.equal(state.person.id,state.user.id);
|
||
|
|
await page.evaluate(()=>Alpine.$data(document.body).open('account'));
|
||
|
|
assert.equal(await dialog.getByLabel('Email address',{exact:true}).inputValue(),email);
|
||
|
|
assert.equal(await dialog.getByLabel('Email address',{exact:true}).isEditable(),false);
|
||
|
|
await dialog.getByLabel('Display name',{exact:true}).fill('Updated profile name');
|
||
|
|
await dialog.getByRole('button',{name:'Save changes',exact:true}).click();
|
||
|
|
await dialog.waitFor({state:'hidden'});
|
||
|
|
await page.reload();
|
||
|
|
await page.waitForFunction(()=>Alpine.$data(document.body).doc?.people.length);
|
||
|
|
assert.equal(await page.evaluate(()=>{const a=Alpine.$data(document.body);return a.doc.people.find(p=>p.id===a.user.id).display_name;}),'Updated profile name');
|
||
|
|
await page.evaluate(()=>{const a=Alpine.$data(document.body);a.open('rotation');a.editPerson(a.user.id);});
|
||
|
|
const details=page.getByRole('region',{name:'Choose a person'});
|
||
|
|
assert.equal(await details.getByLabel('Email for JSM lookup',{exact:true}).inputValue(),email);
|
||
|
|
assert.equal(await details.getByLabel('Email for JSM lookup',{exact:true}).isEditable(),false);
|
||
|
|
await page.setViewportSize({width:390,height:844});
|
||
|
|
fs.mkdirSync('test-results',{recursive:true});
|
||
|
|
await page.screenshot({path:'test-results/account-person-mobile.png'});
|
||
|
|
assert(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth));
|
||
|
|
assert.deepEqual(errors,[]);
|
||
|
|
console.log('PASS: required email, normalized account-owned Person, profile persistence, readonly scheduling identity, mobile');
|
||
|
|
}finally{await browser.close();}
|
||
|
|
})().catch(e=>{console.error(e);process.exitCode=1;});
|