Archived
62 lines
2.6 KiB
JavaScript
62 lines
2.6 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {readFile} from 'node:fs/promises';
|
|
|
|
test('homepage derives one onboarding state and never renders up-to-date copy', async () => {
|
|
const nodes = new Map();
|
|
const node = id => {
|
|
if (!nodes.has(id)) nodes.set(id,{
|
|
hidden:false,textContent:'',innerHTML:'',open:false,
|
|
addEventListener(){},append(){},appendChild(){},replaceChildren(){},style:{}
|
|
});
|
|
return nodes.get(id);
|
|
};
|
|
globalThis.document={
|
|
hidden:false,
|
|
getElementById:node,
|
|
createElement:tag=>({
|
|
tagName:tag.toUpperCase(),hidden:false,textContent:'',innerHTML:'',style:{},open:false,
|
|
setAttribute(){},append(){},appendChild(){},replaceChildren(){},showModal(){this.open=true},close(){this.open=false},
|
|
addEventListener(){},querySelector(){return {value:'',disabled:false}}
|
|
}),
|
|
body:{append(){}}
|
|
};
|
|
globalThis.window={addEventListener(){}};
|
|
globalThis.setInterval=()=>0;
|
|
|
|
let installed={connected:true,initialized:true,unlocked:true,empty:true,version:'0.4.4'};
|
|
let signedIn=true, latest='0.4.4';
|
|
globalThis.chrome={runtime:{sendMessage:(id,message,callback)=>callback(installed),lastError:null}};
|
|
globalThis.fetch=async url=>new Response(JSON.stringify(url==='/api/session'?{owner:'fixture'}:{version:latest}),{
|
|
status:url==='/api/session'&&!signedIn?401:200,headers:{'content-type':'application/json'}
|
|
});
|
|
|
|
const source=(await readFile(new URL('../../persimmons/web/app.js',import.meta.url),'utf8'))
|
|
.replace('./version.mjs',new URL('../version.mjs',import.meta.url).href);
|
|
let sequence=0;
|
|
async function render(){
|
|
await import('data:text/javascript,'+encodeURIComponent(source+'\n//'+sequence++));
|
|
await new Promise(resolve=>setImmediate(resolve));
|
|
}
|
|
|
|
await render();
|
|
assert.equal(node('extensionState').textContent,'🔓');
|
|
assert.equal(node('updateExtension').hidden,true);
|
|
assert.ok(![...nodes.values()].some(n=>n.textContent==='Up to date'));
|
|
|
|
installed={connected:true,initialized:true,unlocked:false,version:'0.4.4'}; await render();
|
|
assert.equal(node('extensionState').textContent,'🔒');
|
|
|
|
installed={connected:false,version:'0.4.3'}; await render();
|
|
assert.equal(node('onboardingHelp').textContent,'Open 🍊 and choose Link vault.');
|
|
assert.equal(node('updateExtension').hidden,false);
|
|
|
|
signedIn=false; await render();
|
|
assert.equal(node('signInLink').hidden,false);
|
|
assert.equal(node('createAccount').hidden,false);
|
|
assert.equal(node('updateExtension').hidden,true);
|
|
|
|
signedIn=true; installed=null; await render();
|
|
assert.equal(node('getExtension').hidden,false);
|
|
});
|