| 123456789101112131415161718192021222324252627 |
- 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')
|