import test from 'node:test' import assert from 'node:assert/strict' import { readFile } from 'node:fs/promises' import { getFacilityPointIcon, getMonitoringPointColor, getMonitoringPointIcon, getMonitoringPointLabel, getMonitoringPointStatus, getMonitoringPointTagType } from '../src/utils/gisMapColors.js' test('shared gis map canvas converts WGS84 coordinates before BMapGL rendering', async () => { const source = await readFile('src/components/GisMapCanvas.vue', 'utf8') assert.match(source, /import \{ convertCoord \} from '@\/utils\/coordTransform'/u) assert.match(source, /const \[lng, lat\] = convertCoord\(point\.lng, point\.lat\)/u) assert.match(source, /new BMapGL\.Point\(lng, lat\)/u) assert.match(source, /mapInstance\.setViewport\(bmapPoints/u) assert.doesNotMatch(source, /new BMapGL\.Point\(point\.lng, point\.lat\)/u) }) test('shared gis map canvas renders every point as an official icon with a label above it', async () => { const source = await readFile('src/components/GisMapCanvas.vue', 'utf8') assert.match(source, /function escapeHtml\(value\)/u) assert.match(source, /let bmapLoadTimer = null/u) assert.match(source, /let disposed = false/u) assert.match(source, /if \(disposed\) \{[\s\S]*?clearInterval\(bmapLoadTimer\)/u) assert.match(source, /if \(disposed \|\| !mapContainer\.value\) return/u) assert.match(source, /onBeforeUnmount\(\(\) => \{[\s\S]*?disposed = true/u) assert.match(source, /clearInterval\(bmapLoadTimer\)/u) assert.match(source, /markerSize: \{ type: Number, default: 28 \}/u) assert.match(source, /const iconUrl = point\.iconUrl \|\| getMonitoringPointIcon\(point\)/u) assert.match(source, /new BMapGL\.Icon\(iconUrl, new BMapGL\.Size\(size, size\), \{/u) assert.match(source, /anchor: new BMapGL\.Size\(size \/ 2, size\)/u) assert.match(source, /const marker = new BMapGL\.Marker\(position, \{/u) assert.match(source, /new BMapGL\.Label\(`
/u) assert.match(source, /offset: new BMapGL\.Size\(-28, -props\.markerSize - 18\)/u) assert.match(source, /width: 56px/u) assert.match(source, /overflow-wrap: anywhere/u) assert.doesNotMatch(source, /white-space: nowrap/u) assert.doesNotMatch(source, / { assert.match(getFacilityPointIcon('source'), /T_MarkPoint_Blue\.png/u) assert.match(getFacilityPointIcon('plant'), /T_MarkPoint_Green\.png/u) assert.match(getFacilityPointIcon('pumpStation'), /T_MarkPoint_Red\.png/u) assert.match(getFacilityPointIcon('pipe'), /T_MarkPoint_Yellow\.png/u) assert.match(getFacilityPointIcon('user'), /T_MarkPoint_Black\.png/u) assert.match(getFacilityPointIcon('unknown'), /T_MarkPoint_Green\.png/u) }) test('monitoring point colors follow the documented status semantics', () => { assert.equal(getMonitoringPointStatus({ relatedOrderNo: 'WO-1' }), 'workOrder') assert.equal(getMonitoringPointStatus({ relatedWorkOrderNo: 'WO-2' }), 'workOrder') assert.equal(getMonitoringPointStatus({ alarmStatus: 1 }), 'alarm') assert.equal(getMonitoringPointStatus({ currentStatus: 3 }), 'warning') assert.equal(getMonitoringPointStatus({ onlineStatus: 0 }), 'offline') assert.equal(getMonitoringPointStatus({}), 'normal') assert.equal(getMonitoringPointColor({ relatedOrderNo: 'WO-1' }), '#3498db') assert.equal(getMonitoringPointColor({ alarmStatus: 1 }), '#e74c3c') assert.equal(getMonitoringPointColor({ currentStatus: 3 }), '#f1c40f') assert.equal(getMonitoringPointColor({ onlineStatus: 0 }), '#95a5a6') assert.equal(getMonitoringPointColor({}), '#2ecc71') assert.match(getMonitoringPointIcon({ relatedOrderNo: 'WO-1' }), /T_MarkPoint_Blue\.png/u) assert.match(getMonitoringPointIcon({ alarmStatus: 1 }), /T_MarkPoint_Red\.png/u) assert.match(getMonitoringPointIcon({ currentStatus: 3 }), /T_MarkPoint_Yellow\.png/u) assert.match(getMonitoringPointIcon({ onlineStatus: 0 }), /T_MarkPoint_Grey\.png/u) assert.match(getMonitoringPointIcon({}), /T_MarkPoint_Green\.png/u) assert.equal(getMonitoringPointLabel({ currentStatus: 3 }), '预警') assert.equal(getMonitoringPointLabel({ relatedWorkOrderNo: 'WO-2' }), '关联工单') assert.equal(getMonitoringPointTagType({ relatedWorkOrderNo: 'WO-2' }), 'primary') assert.equal(getMonitoringPointTagType({ onlineStatus: 0 }), 'info') }) test('water supply GIS pages share the common canvas component', async () => { const deviceSource = await readFile('src/views/subSystem/waterSupply/components/WaterDeviceGisMap.vue', 'utf8') const facilitySource = await readFile('src/views/subSystem/waterSupply/facility/gis.vue', 'utf8') assert.match(deviceSource, /关联工单/u) assert.match(deviceSource, /legend-dot warning/u) assert.match(deviceSource, /getMonitoringPointTagType/u) assert.match(deviceSource, /:points="mapPoints"/u) assert.match(deviceSource, /@point-click="openDetail\(\$event\.equipmentId\)"/u) assert.match(facilitySource, /