Files
past-go/weapp/tests/checkin-pagination.test.cjs

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