import assert from 'node:assert/strict' import { createMapSummaryLoader, toStatusDistribution } from '../../../src/modules/cockpit/domain/mapSummary.js' import { fetchMapSnapshot } from '../../../src/modules/cockpit/services/mapApi.js' const keys = ['ALARM','WARNING','WORK_ORDER','NORMAL','OFFLINE','EMPTY','UNKNOWN','UNASSOCIATED'] const rows = keys.map(status => ({ status, count: 0 })) assert.equal(toStatusDistribution({pointStatusDistribution:rows}).available,true) for(const list of [[],rows.slice(0,6),[...rows,rows[0]],rows.map(row=>({...row,count:-1}))]) assert.equal(toStatusDistribution({pointStatusDistribution:list}).available,false) const config={dataSource:'real',api:{baseUrl:'http://fixture.invalid'}} const token='opaque/+token:2026' let requests=0 const loader=createMapSummaryLoader({pageSize:2,fetchPage:async query=>{ const result=await fetchMapSnapshot({...query,config,pointStatus:['ALARM','WARNING','BOGUS'],fetchImpl:async url=>{ const params=new URL(url).searchParams; requests++ assert.equal(params.get('snapshotAt'),query.page===1?null:token) assert.equal(params.get('pointStatus'),'ALARM,WARNING') return {ok:true,status:200,json:async()=>({code:200,data:{page:query.page,pageSize:2,total:2,snapshotAt:token,complete:query.page===2,monitoringPoints:[{pointCode:`p${query.page}`,longitude:110,latitude:28}],unassociatedEquipment:[],pointStatusDistribution:rows}})} }}) return {ok:result.state==='success',data:result.data} }}) await loader.refresh(); assert.equal((await loader.loadNext()).phase,'complete');assert.equal(requests,2) let calls=0 const missing=createMapSummaryLoader({fetchPage:async()=>{calls++;return {ok:true,data:{objects:[{code:'p'}],complete:false}}}}) await missing.refresh(); const stopped=await missing.loadNext() assert.equal(calls,1);assert.equal(stopped.phase,'failed');assert.equal(stopped.objects.length,1) const expired=createMapSummaryLoader({fetchPage:async query=>query.page===1?{ok:true,data:{snapshotAt:token,complete:false,objects:[{code:'old'}]}}:{ok:false,reason:'snapshot-expired'}}) await expired.refresh();assert.equal((await expired.loadNext()).objects.length,1) console.log('T23 token transport, eight-bucket completeness, invalid status exclusion, missing-token stop and expiry retention passed')