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