import { describe, it, expect } from 'vitest' import { extractCwmpMessage } from '../../../app/protocol/soap.js' describe('extractCwmpMessage — SOAP Fault detection', () => { it('detects soap-env:Fault as Fault message', () => { const body = { 'soap-env:Fault': { faultcode: 'Client', faultstring: 'CWMP fault', detail: { 'cwmp:Fault': { FaultCode: '9001', FaultString: 'Request denied' } }, }, } const msg = extractCwmpMessage(body) expect(msg).not.toBeNull() expect(msg!.type).toBe('Fault') expect(msg!.data.faultcode).toBe('Client') }) it('detects SOAP-ENV:Fault as Fault message', () => { const body = { 'SOAP-ENV:Fault': { faultcode: 'Server', faultstring: 'Internal error', }, } const msg = extractCwmpMessage(body) expect(msg).not.toBeNull() expect(msg!.type).toBe('Fault') expect(msg!.data.faultcode).toBe('Server') }) it('detects bare Fault as Fault message', () => { const body = { Fault: { FaultCode: '9002', FaultString: 'Internal error' }, } const msg = extractCwmpMessage(body) expect(msg).not.toBeNull() expect(msg!.type).toBe('Fault') }) it('detects soapenv:Fault as Fault message', () => { const body = { 'soapenv:Fault': { faultcode: 'Client', faultstring: 'Fault' }, } const msg = extractCwmpMessage(body) expect(msg).not.toBeNull() expect(msg!.type).toBe('Fault') }) it('prefers cwmp: prefixed keys over Fault detection', () => { const body = { 'cwmp:GetParameterValuesResponse': { ParameterList: [] }, 'soap-env:Fault': { faultcode: 'Client' }, } const msg = extractCwmpMessage(body) expect(msg).not.toBeNull() expect(msg!.type).toBe('GetParameterValuesResponse') }) it('returns null when body has no cwmp: keys and no Fault', () => { const body = { 'other:Something': {} } expect(extractCwmpMessage(body)).toBeNull() }) })