import { describe, it, expect } from 'vitest'; import { parseResponse } from '../src/response.js'; describe('parseResponse', () => { it('should parse simple key=value pairs', () => { const response = 'ret=OK,pow=1,mode=2'; const result = parseResponse(response); expect(result.ret).toBe('OK'); expect(result.pow).toBe('1'); expect(result.mode).toBe('2'); }); it('should throw error when ret is missing', () => { const response = 'pow=1,mode=2'; expect(() => parseResponse(response)).toThrow("missing 'ret' field in response"); }); it('should return empty object when ret is not OK', () => { const response = 'ret=NG,error=1'; const result = parseResponse(response); expect(result).toEqual({}); }); it('should decode URL-encoded name', () => { const response = 'ret=OK,name=%4e%6f%74%74%65'; const result = parseResponse(response); expect(result.name).toBe('Notte'); }); it('should handle empty value', () => { const response = 'ret=OK,pow=,mode=2'; const result = parseResponse(response); expect(result.pow).toBe(''); expect(result.mode).toBe('2'); }); it('should handle values with equals sign', () => { const response = 'ret=OK,data=key=value'; const result = parseResponse(response); expect(result.data).toBe('key=value'); }); it('should parse multiple pairs correctly', () => { const response = 'ret=OK,htemp=25.0,hhum=-,otemp=21.0,err=0,cmpfreq=40'; const result = parseResponse(response); expect(result.htemp).toBe('25.0'); expect(result.hhum).toBe('-'); expect(result.otemp).toBe('21.0'); expect(result.err).toBe('0'); expect(result.cmpfreq).toBe('40'); }); });