import assert from 'node:assert/strict' import { test } from 'node:test' import { planMarker } from '../src/modules/cockpit/domain/markerPlan.js' import { facilityStatusTone } from '../src/modules/cockpit/domain/entityDetail.js' import { effectProfileFor, planDeviceEffects, combineEffectPlans } from '../src/modules/cockpit/domain/deviceEffects.js' import { facilityPointsWithDetails, facilityPointMarkers } from '../src/modules/cockpit/domain/facilityPoints.js' test('维护中设施使用蓝色工单状态,并复用设备旋转环参数', () => { const plan = planMarker({ kind: 'facility-point', facilityType: 'WATER_PLANT', status: '1' }) assert.equal(plan.tint, 'lv3') assert.equal(facilityStatusTone('1'), 'lv3') assert.equal(plan.effectStatus, 'WORK_ORDER') assert.equal(plan.inner.icon, 'facilityPlant') const profile = effectProfileFor(plan.effectStatus) assert.deepEqual([profile.effect, profile.layers, profile.periodMs, profile.glow], ['spin', 1, 18000, false]) }) test('报警、显式预警与正常设施按真实状态取特效,未知码不按色键猜测', () => { for (const [status, tint, effectStatus, effect] of [ ['2', 'lv1', 'ALARM', 'pulse'], ['WARNING', 'lv2', 'WARNING', 'blink'], [0, 'lv4', 'NORMAL', ''], ['OFFLINE', 'neutral', 'OFFLINE', ''], [undefined, 'neutral', '', ''], ['3', 'neutral', '', ''], ['constructor', 'neutral', '', ''], ]) { const plan = planMarker({ kind: 'facility-point', facilityType: 'PUMP_STATION', status }) assert.equal(plan.tint, tint) assert.equal(plan.effectStatus, effectStatus) assert.equal(effectProfileFor(plan.effectStatus)?.effect || '', effect) } const overridden = planMarker({ kind: 'facility-point', status: '0', tone: 'lv1' }) assert.equal(effectProfileFor(overridden.effectStatus), null) }) test('详情状态优先,设施原始状态和实体主键不被视觉归一覆盖', () => { const rows = [{ key: 'WATER_PLANT|A', id: 'A', code: 'WP001', type: 'WATER_PLANT', status: '2' }] const points = facilityPointsWithDetails(rows, { 'WATER_PLANT|A': { ok: true, detail: { status: '1', coordinates: { longitude: 110.38, latitude: 28.43 } } }, }) const [row] = facilityPointMarkers(points) assert.equal(row.key, 'facility-point|WATER_PLANT|A') assert.equal(row.status, '1') assert.equal(row.tone, 'lv3') assert.equal(planMarker({ kind: row.kind, facilityType: row.type, status: row.status }).effectStatus, 'WORK_ORDER') assert.equal(rows[0].status, '2') }) test('设施与设备共用开关和阈值,维修不计异常,跨图层超限只收敛', () => { const devices = ['1', '2', 'WARNING', '0', 'unknown'].map((status, index) => ({ code: `facility-point|${index}`, status: planMarker({ kind: 'facility-point', status }).effectStatus, })) const off = planDeviceEffects({ devices, enabled: false }) assert.deepEqual(off.animated, []) const on = planDeviceEffects({ devices, enabled: true, abnormalLimit: 2 }) assert.deepEqual(on.animated.map((row) => row.effect), ['spin', 'pulse', 'blink']) assert.equal(on.ownAbnormalCount, 2) assert.equal(on.degraded, false) const other = planDeviceEffects({ devices: [{ code: 'device-A', status: 'ALARM' }], enabled: true }) const combined = combineEffectPlans([on, other], { enabled: true, abnormalLimit: 2 }) assert.equal(combined.abnormalCount, 3) assert.equal(combined.animatedCount, 4) assert.equal(combined.degraded, true) assert.deepEqual(combined.converge, { peak: 0.6, alpha: 0.5 }) })