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