- task_queue: task lifecycle, events, all SOAP builders, clear pending - device_action_executor: all action methods, callbacks (GPV/GPN/SPV) - reference_engine: resolveAll, resolveOne, trigger matching, numeric events - Coverage: 52% → 67% statements, 428 tests passing
72 lines
2.9 KiB
TypeScript
72 lines
2.9 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { ReferenceEngine } from '../../../../app/services/references/reference_engine.js'
|
|
import type { DeviceRecord } from '../../../../app/domain/device/device_record.js'
|
|
import type { InformContext } from '../../../../app/services/references/types.js'
|
|
import { DeviceId } from '../../../../app/domain/device/device_id.js'
|
|
|
|
function makeDevice(): DeviceRecord {
|
|
return {
|
|
identifier: 'test-001',
|
|
deviceId: new DeviceId('Sagemcom', 'F8B7FF', 'LB6', 'SN001'),
|
|
properties: [],
|
|
parameters: [],
|
|
}
|
|
}
|
|
|
|
describe('ReferenceEngine (full)', () => {
|
|
it('loads providers from config', () => {
|
|
const engine = new ReferenceEngine()
|
|
const names = engine.getProviderNames()
|
|
expect(names).toContain('wassup')
|
|
})
|
|
|
|
it('getProviderConfigs returns all configs', () => {
|
|
const engine = new ReferenceEngine()
|
|
const configs = engine.getProviderConfigs()
|
|
expect(configs.length).toBeGreaterThan(0)
|
|
expect(configs[0].name).toBe('wassup')
|
|
})
|
|
|
|
it('resolveAll returns empty when no events match triggers', async () => {
|
|
const engine = new ReferenceEngine()
|
|
const result = await engine.resolveAll(makeDevice(), { events: ['6 CONNECTION REQUEST'], remoteIp: '10.0.0.1', headers: {} })
|
|
// CONNECTION_REQUEST is not in the wassup trigger config (only BOOT, BOOTSTRAP)
|
|
expect(result).toEqual([])
|
|
})
|
|
|
|
it('resolveAll triggers on BOOT event', async () => {
|
|
const engine = new ReferenceEngine()
|
|
// This will attempt to call the real wassup-mock (which may not be running)
|
|
// We just verify it doesn't crash and returns a result (error or ok)
|
|
const result = await engine.resolveAll(makeDevice(), { events: ['1 BOOT'], remoteIp: '10.0.0.1', headers: {} })
|
|
// Either resolved or error (depending on whether mock is up)
|
|
expect(result.length).toBeLessThanOrEqual(1)
|
|
if (result.length > 0) {
|
|
expect(['ok', 'unknown', 'error']).toContain(result[0].status)
|
|
expect(result[0].provider).toBe('wassup')
|
|
}
|
|
})
|
|
|
|
it('resolveAll triggers on numeric event "0" (BOOTSTRAP)', async () => {
|
|
const engine = new ReferenceEngine()
|
|
const result = await engine.resolveAll(makeDevice(), { events: ['0'], remoteIp: '1.2.3.4', headers: {} })
|
|
expect(result.length).toBeLessThanOrEqual(1)
|
|
})
|
|
|
|
it('resolveOne returns null for unknown provider', async () => {
|
|
const engine = new ReferenceEngine()
|
|
const result = await engine.resolveOne('nonexistent', makeDevice(), { events: [], remoteIp: '', headers: {} })
|
|
expect(result).toBeNull()
|
|
})
|
|
|
|
it('resolveOne calls the named provider', async () => {
|
|
const engine = new ReferenceEngine()
|
|
const result = await engine.resolveOne('wassup', makeDevice(), { events: [], remoteIp: '10.0.0.1', headers: {} })
|
|
// Will get an error or unknown since mock may not be running, but provider is called
|
|
if (result) {
|
|
expect(result.provider).toBe('wassup')
|
|
expect(result.resolvedBy).toContain('ip:10.0.0.1')
|
|
}
|
|
})
|
|
})
|