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