| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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()
|