import { describe, it, expect } from 'vitest' import { parseSoapXml, extractCwmpMessage, buildSoapEnvelope } from '../../../app/protocol/soap.js' describe('parseSoapXml', () => { it('parses a basic Inform SOAP envelope', () => { const xml = ` 0001 Test ` const result = parseSoapXml(xml) expect(result.header.id).toBe('0001') expect(result.body).toBeDefined() expect(result.cwmpVersion).toBe('1.0') }) it('parses soapenv prefix variant', () => { const xml = ` 42 1 ` const result = parseSoapXml(xml) expect(String(result.header.id)).toBe('42') }) it('handles missing header gracefully', () => { const xml = ` ` const result = parseSoapXml(xml) expect(result.header.id).toBeUndefined() }) }) describe('extractCwmpMessage', () => { it('extracts Inform message', () => { const body = { 'cwmp:Inform': { DeviceId: { Manufacturer: 'Test' } } } const msg = extractCwmpMessage(body) expect(msg).not.toBeNull() expect(msg!.type).toBe('Inform') expect(msg!.data.DeviceId.Manufacturer).toBe('Test') }) it('extracts GetParameterValuesResponse', () => { const body = { 'cwmp:GetParameterValuesResponse': { ParameterList: [] } } const msg = extractCwmpMessage(body) expect(msg!.type).toBe('GetParameterValuesResponse') }) it('returns null for empty body', () => { expect(extractCwmpMessage({})).toBeNull() }) it('returns null for non-cwmp keys', () => { expect(extractCwmpMessage({ 'other:Thing': {} })).toBeNull() }) }) describe('buildSoapEnvelope', () => { it('builds valid XML envelope', () => { const xml = buildSoapEnvelope('id-123', '') expect(xml).toContain('soap-env:Envelope') expect(xml).toContain('id-123') expect(xml).toContain('') }) it('builds envelope without id', () => { const xml = buildSoapEnvelope(undefined, '') expect(xml).toContain('') }) })