import { describe, it, expect } from 'vitest' import { CWMPMessageBuilder } from '../../../app/protocol/common/cwmp_message_builder.js' describe('CWMPMessageBuilder', () => { it('informResponse builds valid response', () => { const xml = CWMPMessageBuilder.informResponse('id-1') expect(xml).toContain('InformResponse') expect(xml).toContain('MaxEnvelopes') expect(xml).toContain('id-1') }) it('getParameterNames builds request', () => { const xml = CWMPMessageBuilder.getParameterNames('id-2', 'Device.', true) expect(xml).toContain('GetParameterNames') expect(xml).toContain('Device.') expect(xml).toContain('1') }) it('getParameterNames with nextLevel=false', () => { const xml = CWMPMessageBuilder.getParameterNames('id-3', 'Device.', false) expect(xml).toContain('0') }) it('getParameterValues builds request with names', () => { const xml = CWMPMessageBuilder.getParameterValues('id-4', ['Device.Info.SW', 'Device.Info.HW']) expect(xml).toContain('GetParameterValues') expect(xml).toContain('Device.Info.SW') expect(xml).toContain('Device.Info.HW') expect(xml).toContain('arrayType="xsd:string[2]"') }) it('setParameterValues builds request with params', () => { const xml = CWMPMessageBuilder.setParameterValues('id-5', [ { name: 'Device.X', value: '42', type: 'xsd:int' }, ]) expect(xml).toContain('SetParameterValues') expect(xml).toContain('Device.X') expect(xml).toContain('42') expect(xml).toContain('xsd:int') expect(xml).toContain('ParameterKey') }) it('download builds request with all params', () => { const xml = CWMPMessageBuilder.download('id-6', { url: 'http://example.com/fw.bin', commandKey: 'fw-upgrade', fileType: '1 Firmware Upgrade Image', fileSize: 1024, }) expect(xml).toContain('Download') expect(xml).toContain('http://example.com/fw.bin') expect(xml).toContain('fw-upgrade') expect(xml).toContain('1024') }) it('upload builds request', () => { const xml = CWMPMessageBuilder.upload('id-7', { url: 'http://upload.com/cfg', commandKey: 'cfg-bk' }) expect(xml).toContain('Upload') expect(xml).toContain('http://upload.com/cfg') expect(xml).toContain('cfg-bk') }) it('reboot builds request', () => { const xml = CWMPMessageBuilder.reboot('id-8', 'reboot-key') expect(xml).toContain('Reboot') expect(xml).toContain('reboot-key') }) it('factoryReset builds request', () => { const xml = CWMPMessageBuilder.factoryReset('id-9') expect(xml).toContain('FactoryReset') }) it('scheduleInform builds request', () => { const xml = CWMPMessageBuilder.scheduleInform('id-10', 300, 'sched-key') expect(xml).toContain('ScheduleInform') expect(xml).toContain('300') expect(xml).toContain('sched-key') }) it('getParameterAttributes builds request', () => { const xml = CWMPMessageBuilder.getParameterAttributes('id-11', ['Device.Info.']) expect(xml).toContain('GetParameterAttributes') expect(xml).toContain('Device.Info.') }) it('setParameterAttributes builds request', () => { const xml = CWMPMessageBuilder.setParameterAttributes('id-12', [ { name: 'Device.X', notificationChange: true, notification: 2, accessListChange: false, accessList: [] }, ]) expect(xml).toContain('SetParameterAttributes') expect(xml).toContain('Device.X') expect(xml).toContain('1') expect(xml).toContain('2') }) it('emptyResponse returns empty string', () => { expect(CWMPMessageBuilder.emptyResponse()).toBe('') }) })