为打卡详情记录增加分页并保持全量统计
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user