t32-visual-default.mjs 1.6 KB

1234567891011121314151617181920
  1. import assert from 'node:assert/strict'
  2. import { planPipeModels } from '../../../src/modules/cockpit/domain/pipeModels.js'
  3. const make=(industry,remark='',diameter=null)=>({code:industry+remark,industry,remark,diameter,positions:[[110.39,28.44],[110.3901,28.44]]})
  4. const pipes=[make('GAS'),make('WATER_SUPPLY'),make('DRAINAGE','污水'),make('DRAINAGE','雨水')]
  5. const before=JSON.stringify(pipes),plan=planPipeModels({pipes,components:[]})
  6. assert.equal(plan.instances.length,4,'missing diameters with known categories must have display models')
  7. assert.deepEqual(plan.instances.map(i=>i.visualDefaultDiameterM),[.16,.4,.8,.8])
  8. assert.ok(plan.instances.every(i=>i.diameterM===null&&i.diameterSource==='visual-default'))
  9. assert.ok(plan.instances.every(i=>i.diameterAnchors.length===0))
  10. assert.equal(plan.diameterSummary.missing,4)
  11. assert.equal(plan.visualDefaultCount,4)
  12. assert.equal(JSON.stringify(pipes),before,'source stays missing')
  13. const unknown=planPipeModels({pipes:[{...make('DRAINAGE','雨水 污水'),networkLevel:2}],components:[]})
  14. assert.equal(unknown.instances[0].visualDefaultDiameterM,.8)
  15. assert.equal(unknown.instances[0].colorKey,'DRAINAGE_UNKNOWN')
  16. assert.equal(unknown.instances[0].diameterM,null)
  17. assert.equal(planPipeModels({pipes:[make('UNKNOWN')],components:[]}).fallbacks.length,1)
  18. const reported=planPipeModels({pipes:[make('GAS','',150)],components:[]}).instances[0]
  19. assert.equal(reported.diameterM,.15);assert.equal(reported.diameterSource,'reported');assert.equal(reported.visualDefaultDiameterM,null)
  20. console.log('PASS explicit per-category display defaults, missing provenance, source priority and unknown fallback')