UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

115 lines (97 loc) 3.9 kB
import GetResponse from "../src/messages/GetResponse"; import DlmsDatas from "../src/typesDLMS/DlmsDatas"; jest.mock("../src/typesDLMS/DlmsDatas"); describe("GetResponse class", () => { beforeEach(() => { DlmsDatas.factory.mockClear(); }); const mockDlmsData = { insertData: jest.fn(), rawValue: [0x12, 0x34, 0x56], }; DlmsDatas.factory.mockReturnValue(mockDlmsData); test("should initialize with default values when no bytes are provided", () => { const getResponse = new GetResponse(); expect(getResponse.setType).toBe(0); expect(getResponse.invokeIdAndPriority).toBe(0); expect(getResponse.parameterType).toBe(0); expect(getResponse.accessResult).toBeNull(); expect(getResponse.dlmsData).toBeNull(); expect(getResponse.value).toEqual([]); }); test("should correctly parse bytes with parameterType = 0 (DlmsData)", () => { const bytes = [ 0x01, // Message type 0x02, // setType 0xC3, // invokeIdAndPriority 0x00, // parameterType 0x01, // DlmsData type 0xA1, 0xB2, 0xC3, // DlmsData rawValue ]; const getResponse = new GetResponse(bytes); expect(getResponse.setType).toBe(0x02); expect(getResponse.invokeIdAndPriority).toBe(0xC3); expect(getResponse.parameterType).toBe(0x00); expect(getResponse.dlmsData).toEqual(mockDlmsData); expect(mockDlmsData.insertData).toHaveBeenCalledWith([0x01, 0xA1, 0xB2, 0xC3]); expect(getResponse.accessResult).toBeNull(); }); test("should correctly parse bytes with parameterType != 0 (accessResult)", () => { const bytes = [ 0x01, // Message type 0x02, // setType 0xC3, // invokeIdAndPriority 0x01, // parameterType 0x05, // accessResult ]; const getResponse = new GetResponse(bytes); expect(getResponse.setType).toBe(0x02); expect(getResponse.invokeIdAndPriority).toBe(0xC3); expect(getResponse.parameterType).toBe(0x01); expect(getResponse.accessResult).toBe(0x05); expect(getResponse.dlmsData).toBeNull(); }); test("should return the correct byte array with getBytes()", () => { const bytes = [ 0x01, // Message type 0x02, // setType 0xC3, // invokeIdAndPriority 0x00, // parameterType 0x01, // DlmsData type 0xA1, 0xB2, 0xC3, // DlmsData rawValue ]; const getResponse = new GetResponse(bytes); const result = getResponse.getBytes(); expect(result).toEqual(bytes); }); test("should return the correct hexadecimal string with getHexString()", () => { const bytes = [ 0x01, // Message type 0x02, // setType 0xC3, // invokeIdAndPriority 0x00, // parameterType 0x01, // DlmsData type 0xA1, 0xB2, 0xC3, // DlmsData rawValue ]; const getResponse = new GetResponse(bytes); const hexString = getResponse.getHexString(); const expectedHex = bytes .map(byte => byte.toString(16).toUpperCase().padStart(2, '0')) .join(' '); expect(hexString).toBe(expectedHex); }); test("should throw an error if DlmsDatas.factory fails", () => { DlmsDatas.factory.mockImplementation(() => { throw new Error("Factory error"); }); const bytes = [ 0x01, // Message type 0x02, // setType 0xC3, // invokeIdAndPriority 0x00, // parameterType 0x01, // DlmsData type 0xA1, 0xB2, 0xC3, // DlmsData rawValue ]; expect(() => new GetResponse(bytes)).toThrow("Factory error"); }); });