t32-visibility-style.mjs 1.7 KB

1234567891011121314151617
  1. import assert from 'node:assert/strict'
  2. import { planPipeModels } from '../../../src/modules/cockpit/domain/pipeModels.js'
  3. import { toPipeNetwork } from '../../../src/modules/cockpit/domain/pipeNetwork.js'
  4. const pipe=(industry,remark,diameter=100)=>({code:industry+remark,industry,remark,diameter,positions:[[110.39,28.44],[110.3901,28.44]]})
  5. const input=[pipe('GAS',''),pipe('WATER_SUPPLY',''),pipe('DRAINAGE','污水'),{...pipe('DRAINAGE','雨水'),networkLevel:1}]
  6. const plan=planPipeModels({pipes:input,components:[]})
  7. assert.deepEqual(plan.instances.map(row=>row.colorKey),['GAS','WATER_SUPPLY','SEWAGE','RAINWATER'])
  8. assert.ok(plan.instances.every(row=>row.displayDiameterM===.1),'physical body diameter follows source metres without exaggeration')
  9. assert.ok(plan.instances.every(row=>row.diameterM===.1),'source millimetres are converted once to metres')
  10. const payload={features:[{geometry:{type:'LineString',coordinates:[[110.39,28.44],[110.3901,28.44]]},properties:{code:'remark-wins',industry:'DRAINAGE',name:'雨水管',remark:'污水',diameter:400,coordinateValidation:{renderable:true}}}]}
  11. const adapted=toPipeNetwork(payload)
  12. assert.equal(adapted.pipes[0].remark,'污水')
  13. assert.equal(planPipeModels(adapted).instances[0].colorKey,'SEWAGE','missing level defaults to sewage regardless of remark/name')
  14. assert.equal(planPipeModels({pipes:[{...pipe('DRAINAGE','雨水 污水'),networkLevel:2}],components:[]}).instances[0].colorKey,'DRAINAGE_UNKNOWN')
  15. assert.equal(planPipeModels({pipes:[{...pipe('DRAINAGE',''),name:'雨水管'}],components:[]}).instances[0].colorKey,'SEWAGE','missing level uses zero, never infer rain from name')
  16. console.log('PASS five-class semantics from network level, invalid unknown, source diameter separate from display')