Files
adam-acs/tests/unit/services/references/reference_engine_full.spec.ts
T
Kevin L'Hereec ab21f11b30 test: CWMP task_queue, device_action_executor, reference_engine tests
- 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
2026-06-02 16:35:08 +02:00

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')
}
})
})