UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

102 lines (81 loc) 3.35 kB
import ReadResponse from "../src/messages/ReadResponse"; import DlmsDatas from "../src/typesDLMS/DlmsDatas"; jest.mock("../src/typesDLMS/DlmsDatas"); describe("ReadResponse class", () => { beforeEach(() => { DlmsDatas.factory.mockClear(); }); const mockDlmsData = { insertData: jest.fn(), totalBytes: 4, }; DlmsDatas.factory.mockReturnValue(mockDlmsData); test("should initialize with default values when no bytes are provided", () => { const readResponse = new ReadResponse(); expect(readResponse.qty).toBe(0); expect(readResponse.parameterType).toBe(0); expect(readResponse.dlmsData).toBeNull(); expect(readResponse.dataAccessResult).toBeNull(); expect(readResponse.value).toEqual([]); }); test("should correctly parse bytes with parameterType = 0 (DlmsData)", () => { const bytes = [ 0x01, // Message type 0x01, // qty 0x00, // parameterType (DlmsData) 0x02, // DlmsData type 0xAA, 0xBB, 0xCC, 0xDD, // DlmsData raw bytes ]; const readResponse = new ReadResponse(bytes); expect(readResponse.qty).toBe(1); expect(readResponse.parameterType).toBe(0); expect(readResponse.dlmsData).toEqual(mockDlmsData); expect(mockDlmsData.insertData).toHaveBeenCalledWith([0x02, 0xAA, 0xBB, 0xCC, 0xDD]); expect(readResponse.dataAccessResult).toBeNull(); }); test("should correctly parse bytes with parameterType != 0 (DataAccessResult)", () => { const bytes = [ 0x01, // Message type 0x01, // qty 0x01, // parameterType (DataAccessResult) 0x05, // dataAccessResult ]; const readResponse = new ReadResponse(bytes); expect(readResponse.qty).toBe(1); expect(readResponse.parameterType).toBe(1); expect(readResponse.dlmsData).toBeNull(); expect(readResponse.dataAccessResult).toBe(0x05); }); test("should return the correct hexadecimal string with getHexString()", () => { const bytes = [ 0x01, // Message type 0x01, // qty 0x00, // parameterType (DlmsData) 0x02, // DlmsData type 0xAA, 0xBB, 0xCC, 0xDD, // DlmsData raw bytes ]; const readResponse = new ReadResponse(bytes); const hexString = readResponse.getHexString(); const expectedHex = bytes .map(byte => byte.toString(16).toUpperCase().padStart(2, "0")) .join(" "); expect(hexString).toBe(expectedHex); }); test("should throw an error when calling getBytes()", () => { const readResponse = new ReadResponse(); expect(() => readResponse.getBytes()).toThrow("Method not implemented."); }); test("should throw an error if DlmsDatas.factory fails", () => { DlmsDatas.factory.mockImplementation(() => { throw new Error("Factory error"); }); const bytes = [ 0x01, // Message type 0x01, // qty 0x00, // parameterType (DlmsData) 0x02, // DlmsData type 0xAA, 0xBB, 0xCC, 0xDD, // DlmsData raw bytes ]; expect(() => new ReadResponse(bytes)).toThrow("Factory error"); }); });