Consolidate Persimmons extension
This commit is contained in:
1 parent
d557d3a2f8
commit
534961db9b
1 file changed
+61
@@ -0,0 +1,61 @@
|
||||
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);
|
||||
});
|
||||
Reference in new issue
Block a user