| 1234567891011121314151617181920212223242526272829303132 |
- import assert from 'node:assert/strict'
- import { writeFile } from 'node:fs/promises'
- import { toPipeNetwork } from '../../../src/modules/cockpit/domain/pipeNetwork.js'
- import { planPipeModels } from '../../../src/modules/cockpit/domain/pipeModels.js'
- const endpoint='http://192.168.110.96:8301/api/cockpit/v1/infrastructure/geometry'
- const response=await fetch(endpoint)
- assert.equal(response.status,200)
- const envelope=await response.json()
- assert.equal(envelope.code,200)
- const payload=envelope.data
- const rawLines=payload.features.filter(row=>row.geometry?.type==='LineString')
- assert.ok(rawLines.every(row=>Object.hasOwn(row.properties,'diameter')),'deployed backend diameter field missing')
- const network=toPipeNetwork(payload)
- const original=JSON.stringify(network.pipes)
- const plan=planPipeModels(network)
- assert.equal(JSON.stringify(network.pipes),original,'raw diameters/coordinates must remain unchanged')
- const byId=new Map(plan.instances.filter(row=>row.kind==='spline').map(row=>[row.id,row]))
- const interpolated=[...byId.values()].filter(row=>row.diameterSource==='interpolated')
- for(const row of interpolated){
- assert.equal(row.diameterAnchors.length,2)
- assert.notEqual(row.diameterAnchors[0].code,row.diameterAnchors[1].code)
- const values=row.diameterAnchors.map(anchor=>anchor.diameterMm/1000)
- assert.ok(row.diameterM>=Math.min(...values)&&row.diameterM<=Math.max(...values))
- }
- assert.equal(plan.diameterSummary.reported+plan.diameterSummary.interpolated+plan.diameterSummary.missing,network.pipes.length)
- const result={checkedAt:new Date().toISOString(),endpoint,httpStatus:response.status,businessCode:envelope.code,
- rawLines:rawLines.length,diameterFieldCount:rawLines.filter(row=>Object.hasOwn(row.properties,'diameter')).length,
- diameterSummary:plan.diameterSummary,components:network.components.length,blocked:network.blocked.length,
- inferredExample:interpolated.slice(0,8).map(row=>({code:row.id.slice(5),diameterMm:row.diameterM*1000,source:row.diameterSource,anchors:row.diameterAnchors})),
- rawDataUnchanged:true,browserVerified:false,renderingPerformanceVerified:false}
- await writeFile(new URL('./artifacts/t32/diameter-live-result.json',import.meta.url),JSON.stringify(result,null,2)+'\n')
- console.log(JSON.stringify(result,null,2))
|