同步小程序与管理端更新,完善抽烟记录和解绑冷静期
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const path = require('node:path');
|
||||
const createLoader = require('./load-module.cjs');
|
||||
function setup(initial, seen = true) {
|
||||
const storage = new Map(seen ? [['launchIntroSeen', true]] : []);
|
||||
let definition, notify, unsubscribed = false;
|
||||
const timers = new Map();let timerId=0;
|
||||
const app={observeAuth(callback){notify=callback;callback(initial,'');return ()=>{unsubscribed=true;};}};
|
||||
const load=createLoader({wx:{getStorageSync:k=>storage.get(k),setStorageSync:(k,v)=>storage.set(k,v)},Component:c=>definition=c,getApp:()=>app,Date,
|
||||
setTimeout(fn){timers.set(++timerId,fn);return timerId;},clearTimeout(id){timers.delete(id);}});
|
||||
load(path.join(__dirname,'../components/launch-transition/launch-transition.js'));
|
||||
const updates=[];
|
||||
const component={...definition.methods,data:{...definition.data},setData(values){updates.push(values);Object.assign(this.data,values);}};
|
||||
return {definition,component,updates,timers,storage,notify:(...args)=>notify(...args),unsubscribed:()=>unsubscribed};
|
||||
}
|
||||
test('authenticated page transitions never show the launch overlay, even on initial render',()=>{
|
||||
const e=setup('ready');assert.equal(e.component.data.visible,false);
|
||||
e.definition.lifetimes.attached.call(e.component);
|
||||
assert.equal(e.component.data.visible,false);assert.ok(e.updates.every(update=>update.visible!==true));assert.equal(e.timers.size,0);
|
||||
});
|
||||
test('cold-start waiting and login failures still show overlay and release subscriptions',()=>{
|
||||
const e=setup('loading',false);e.definition.lifetimes.attached.call(e.component);assert.equal(e.component.data.visible,true);
|
||||
e.notify('error','login failed');assert.equal(e.component.data.state,'error');assert.equal(e.component.data.message,'login failed');
|
||||
e.notify('ready');assert.equal(e.timers.size,0);assert.equal(e.component.data.visible,false);
|
||||
e.definition.lifetimes.detached.call(e.component);assert.equal(e.unsubscribed(),true);assert.equal(e.timers.size,0);
|
||||
});
|
||||
|
||||
test('introduction is shown once per device, including when login is already ready',()=>{
|
||||
const first=setup('ready',false);first.definition.lifetimes.attached.call(first.component);
|
||||
assert.equal(first.component.data.visible,true);assert.equal(first.component.data.intro,true);
|
||||
assert.equal(first.storage.get('launchIntroSeen'),true);
|
||||
for(const fn of first.timers.values())fn();assert.equal(first.component.data.visible,false);
|
||||
first.notify('loading');assert.equal(first.component.data.visible,false);
|
||||
const next=setup('loading',first.storage.get('launchIntroSeen'));next.definition.lifetimes.attached.call(next.component);
|
||||
assert.equal(next.component.data.visible,false);
|
||||
next.notify('error','network unavailable');assert.equal(next.component.data.visible,true);assert.equal(next.component.data.intro,false);
|
||||
next.notify('ready');assert.equal(next.component.data.visible,false);
|
||||
});
|
||||
Reference in New Issue
Block a user