38 lines
2.6 KiB
JavaScript
38 lines
2.6 KiB
JavaScript
const test=require('node:test');
|
|
const assert=require('node:assert/strict');
|
|
const path=require('node:path');
|
|
const load=require('./load-module.cjs');
|
|
function setup(checkinDetail){
|
|
let definition;
|
|
load({Page:p=>definition=p,wx:{getStorageSync:()=>1},console,Date,Promise,Set},{
|
|
'../../utils/page-cache':{withDataCache:p=>p},'../../utils/layout':{getLayout:()=>({})},
|
|
'../../utils/request':{api:{checkinDetail},getImageUrl:v=>v},
|
|
'../../utils/util':{createSwipeBack:()=>({})},'../../utils/subscribe':{requestSubscribeAfterAction(){}}
|
|
})(path.join(__dirname,'../pages/checkin-detail/checkin-detail.js'));
|
|
const page={...definition,data:JSON.parse(JSON.stringify(definition.data)),setData(patch){Object.assign(this.data,patch);}};
|
|
page.data.detailId=9;return page;
|
|
}
|
|
const first={item:{id:9,type:'both',created_by:1},logs:[{id:3,created_at:'2026-10-11 09:00:00'}],total:3,has_more:true,my_year:99};
|
|
test('first page resets records; next page appends once without replacing full stats',async()=>{
|
|
let calls=[];let release;
|
|
const page=setup((id,params)=>{calls.push(params);return params.page===1?Promise.resolve(first):new Promise(resolve=>release=resolve);});
|
|
await page.loadDetail(9);const pending=page.loadMoreLogs();await page.loadMoreLogs();
|
|
assert.equal(calls.length,2);assert.equal(calls[1].page,2);
|
|
release({logs:[{id:3},{id:2},{id:1}],total:3,has_more:false,my_year:1});await pending;
|
|
assert.deepEqual(page.data.logs.map(x=>x.id),[3,2,1]);assert.equal(page.data.myYear,99);
|
|
await page.loadMoreLogs();assert.equal(calls.length,2);
|
|
await page.loadDetail(9);assert.equal(page.data.logs.length,1);assert.equal(page.data.logsPage,1);
|
|
});
|
|
test('failed next page preserves list and retries the same page',async()=>{
|
|
let fail=true;const calls=[];
|
|
const page=setup(async(id,params)=>{calls.push(params.page);if(params.page===1)return first;if(fail)throw Error('offline');return {logs:[{id:2}],total:3,has_more:true};});
|
|
await page.loadDetail(9);await page.loadMoreLogs();assert.equal(page.data.logsPage,1);assert.equal(page.data.logsError,true);assert.equal(page.data.logs.length,1);
|
|
fail=false;await page.loadMoreLogs();assert.deepEqual(calls,[1,2,2]);assert.equal(page.data.logsError,false);
|
|
});
|
|
test('an old next-page response cannot append after refreshed first page',async()=>{
|
|
let release;const page=setup(async(id,params)=>params.page===1?first:new Promise(resolve=>release=resolve));
|
|
await page.loadDetail(9);const pending=page.loadMoreLogs();await page.loadDetail(9);
|
|
release({logs:[{id:1}],has_more:false});await pending;
|
|
assert.deepEqual(page.data.logs.map(x=>x.id),[3]);assert.equal(page.data.logsPage,1);
|
|
});
|