import assert from 'node:assert/strict' import { toMonitoringPoint } from '../../../src/modules/cockpit/domain/mapSummary.js' import { loadEnhancementDevices } from '../../../src/modules/cockpit/services/enhancementDevices.js' const point = toMonitoringPoint({ pointCode: 'no-list', pointName: '有真实设备的点', longitude: 110, latitude: 28 }) const card = { code: 'D', longitude: 110, latitude: 28, coordinate: { renderable: true } } const missing = await loadEnhancementDevices({ phase: 'complete', objects: [point] }, { fetchPoint: async () => ({ state: 'success', data: { code: point.code, devices: [card] } }) }) assert.equal(missing.rows.length, 1, '缺摘要编码清单不能把真实点详情设备全部丢弃') assert.equal(missing.partial, true, '仍须提示缺少快照设备清单,不能冒称完整') const explicit = await loadEnhancementDevices({ phase: 'complete', objects: [{ ...point, deviceCodesAvailable: true, deviceCodes: [] }] }, { fetchPoint: async () => ({ state: 'success', data: { code: point.code, devices: [card] } }) }) assert.equal(explicit.rows.length, 0, '显式筛空清单不能被点详情绕过') let release const progress = [] const loading = loadEnhancementDevices({ phase: 'complete', objects: [ { kind: 'unassociated-equipment', code: 'standalone' }, { kind: 'monitoring-point', code: 'fast', deviceCodes: ['fast-device'] }, { kind: 'monitoring-point', code: 'slow', deviceCodes: [] }, ] }, { onProgress: (state) => progress.push(state), fetchPoint: async (code) => code === 'fast' ? { state: 'success', data: { code, devices: [{ ...card, code: 'fast-device' }] } } : new Promise((resolve) => { release = () => resolve({ state: 'success', data: { code, devices: [] } }) }) }) await Promise.resolve(); await Promise.resolve() assert.ok(progress.some((state) => state.rows.some((row) => row.code === 'standalone'))) assert.ok(progress.some((state) => state.rows.some((row) => row.code === 'fast-device')), '慢点不应阻止先返回设备呈现') assert.ok(progress.every((state) => state.partial)) release(); await loading console.log('PASS 缺失/显式空设备清单区别,独立和已返回设备渐进呈现,慢点不阻塞')