import assert from 'node:assert/strict' import { registerCockpitMocks } from '../../../src/modules/cockpit/mocks/contractMocks.js' import { registerMockTransport, getMockTransportPaths, resetMockTransportsForTest } from '../../../src/modules/cockpit/services/cockpitApi.js' import { fetchMapSnapshot } from '../../../src/modules/cockpit/services/mapApi.js' import { fetchMonitoringPointDetail } from '../../../src/modules/cockpit/services/detailApi.js' import { groupOverlappingDevices } from '../../../src/modules/cockpit/domain/overlapDevices.js' import { planDeviceEffects } from '../../../src/modules/cockpit/domain/deviceEffects.js' import { resolveDetailAnchor } from '../../../src/modules/cockpit/domain/detailAnchor.js' const config = { dataSource: 'mock', api: { baseUrl: '', token: '' } } registerCockpitMocks({ scenario: 'success', handlers: { registerMockTransport, getMockTransportPaths, resetMockTransportsForTest } }) const snapshot = await fetchMapSnapshot({ page: 1, pageSize: 100, config }) assert.equal(snapshot.state, 'success') const objects = snapshot.data.points for (const [code, k] of [['MP-001', 2], ['MP-002', 11]]) { const section = await fetchMonitoringPointDetail(code, { config }) assert.equal(section.state, 'success') const point = objects.find((item) => item.code === code) assert.ok(point) const devices = section.data.devices.map((device) => ({ ...device, pointCode: code, placement: 'drawn' })) assert.equal(devices.length, k) assert.deepEqual(devices.map((item) => item.code), point.deviceCodes) assert.ok(devices.every((item) => item.coordinate.renderable === true)) const groups = groupOverlappingDevices(devices, { maxFan: 10 }) assert.equal(groups.length, 1) assert.equal(groups[0].k, k) assert.equal(groups[0].degraded, k > 10) const effects = planDeviceEffects({ devices, enabled: true }) assert.ok(effects.animated.length > 0) assert.equal(effects.degraded, false) for (const device of devices) { assert.ok(Math.abs(device.longitude - point.longitude) < 0.002) assert.ok(Math.abs(device.latitude - point.latitude) < 0.002) const anchor = resolveDetailAnchor({ selection: { level: 'equipment', pointCode: code, deviceCode: device.code }, objects, devices }) assert.equal(anchor.code, device.code) assert.equal(anchor.object, device) } if (code === 'MP-002') { assert.deepEqual([...new Set(devices.map((item) => item.status))].sort(), ['ALARM', 'WARNING', 'WORK_ORDER', 'NORMAL', 'OFFLINE'].sort()) assert.deepEqual([...new Set(effects.animated.map((item) => item.effect))].sort(), ['pulse', 'blink', 'spin'].sort()) } console.log(`PASS default main scene ${code}: K=${k}, matching snapshot/detail, local coordinates, device anchors and effects`) } resetMockTransportsForTest()