t16-stores.mjs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import assert from 'node:assert/strict'
  2. import { createPinia, setActivePinia } from 'pinia'
  3. import { useRuntimeStore } from '../../../src/modules/cockpit/stores/runtimeStore.js'
  4. import { useEventStore } from '../../../src/modules/cockpit/stores/eventStore.js'
  5. import { useOverviewStore } from '../../../src/modules/cockpit/stores/overviewStore.js'
  6. import { useDetailStore } from '../../../src/modules/cockpit/stores/detailStore.js'
  7. setActivePinia(createPinia())
  8. const runtime = useRuntimeStore()
  9. const events = useEventStore()
  10. const overview = useOverviewStore()
  11. const detail = useDetailStore()
  12. const calls = []
  13. events.loadPanels = async () => { calls.push('events') }
  14. overview.loadPanels = async () => { calls.push('overview') }
  15. detail.loadEquipmentAggregate = async (code) => { calls.push(code) }
  16. detail.selection = { level: 'equipment', deviceCode: 'EQ-1' }
  17. const frame = { serverUpdatedAt: '2026-10-09T12:00:00+08:00', scanIntervalMs: 60000, items: [{ code: 'WO-1', deviceCode: 'EQ-1', stateCode: 4 }] }
  18. assert.equal(runtime.ingestWorkOrders(frame), true)
  19. assert.deepEqual(calls, ['events', 'overview', 'EQ-1'])
  20. assert.equal(runtime.orderScanIntervalMs, 60000)
  21. assert.equal(runtime.ingestWorkOrders(frame), false)
  22. assert.equal(runtime.ingestWorkOrders({ ...frame, serverUpdatedAt: '2026-10-08T12:00:00+08:00' }), false)
  23. assert.equal(calls.length, 3)
  24. assert.equal(runtime.ingestWorkOrders({ ...frame, items: [{ code: 'WO-2', deviceCode: 'EQ-2' }] }), true)
  25. assert.deepEqual(calls.slice(3), ['events', 'overview'])
  26. assert.equal(detail.selection.deviceCode, 'EQ-1')
  27. assert.deepEqual(runtime.statusState.deviceStates, {})
  28. detail.setSection('equipmentAggregate', { state: 'success', data: { deviceCode: 'EQ-1', sections: {} } })
  29. detail.closeDetail()
  30. assert.equal(runtime.ingestWorkOrders({ ...frame, serverUpdatedAt: '2026-10-09T12:01:00+08:00' }), true)
  31. assert.equal(detail.sections.equipmentAggregate.loaded, false)
  32. detail.selection = { level: 'equipment', deviceCode: 'EQ-1' }
  33. const before = calls.length
  34. runtime.ingest({ deviceCode: 'EQ-1', status: 'ALARM', serverUpdatedAt: '2026-10-09T12:02:00+08:00', eventId: 'ALARM-1' })
  35. assert.deepEqual(calls.slice(before), ['events', 'overview', 'EQ-1'])
  36. runtime.reset()
  37. console.log('T16 real Pinia store routing passed: stale rejection, same-time different orders, affected detail only, device state isolation.')