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); });