UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

126 lines (109 loc) 4.55 kB
import ActionResponse from "../src/messages/ActionResponse"; import MessageType from "../src/enum/MessageType"; import DlmsDatas from "../src/typesDLMS/DlmsDatas"; jest.mock("../src/typesDLMS/DlmsDatas"); describe("ActionResponse class", () => { beforeEach(() => { DlmsDatas.factory.mockClear(); }); const mockDlmsData = { rawValue: [0x12, 0x34, 0x56], insertData: jest.fn(), }; DlmsDatas.factory.mockReturnValue(mockDlmsData); test("should initialize with default values when no bytes are provided", () => { const actionResponse = new ActionResponse(); expect(actionResponse.SetType).toBeNull(); expect(actionResponse.InvokeIdAndPriority).toBeNull(); expect(actionResponse.DataAcessResult).toBeNull(); expect(actionResponse.ReturnParameters).toBeNull(); expect(actionResponse.ParameterType).toBeNull(); expect(actionResponse.DlmsData).toBeNull(); expect(actionResponse.GetDataAcessResult).toBeNull(); expect(actionResponse.Value).toBeNull(); }); test("should correctly parse bytes with ReturnParameters = 0", () => { const bytes = [MessageType.ACTION_RESPONSE, 0x01, 0xC3, 0x00, 0x00]; const actionResponse = new ActionResponse(bytes); expect(actionResponse.SetType).toBe(0x01); expect(actionResponse.InvokeIdAndPriority).toBe(0xC3); expect(actionResponse.DataAcessResult).toBe(0x00); expect(actionResponse.ReturnParameters).toBe(0x00); expect(actionResponse.ParameterType).toBeNull(); expect(actionResponse.DlmsData).toBeNull(); expect(actionResponse.GetDataAcessResult).toBeNull(); expect(actionResponse.Value).toEqual(bytes); }); test("should correctly parse bytes with ParameterType = 0 (DlmsData)", () => { const bytes = [ MessageType.ACTION_RESPONSE, 0x01, 0xC3, 0x00, 0x01, 0x00, // ParameterType 0x12, // DlmsData type 0x34, 0x56, ]; const actionResponse = new ActionResponse(bytes); expect(actionResponse.SetType).toBe(0x01); expect(actionResponse.InvokeIdAndPriority).toBe(0xC3); expect(actionResponse.DataAcessResult).toBe(0x00); expect(actionResponse.ReturnParameters).toBe(0x01); expect(actionResponse.ParameterType).toBe(0x00); expect(actionResponse.DlmsData).toEqual(mockDlmsData); expect(mockDlmsData.insertData).toHaveBeenCalledWith([0x12, 0x34, 0x56]); expect(actionResponse.GetDataAcessResult).toBeNull(); }); test("should correctly parse bytes with ParameterType != 0 (GetDataAcessResult)", () => { const bytes = [ MessageType.ACTION_RESPONSE, 0x01, 0xC3, 0x00, 0x01, 0x01, // ParameterType 0x05, // GetDataAcessResult ]; const actionResponse = new ActionResponse(bytes); expect(actionResponse.SetType).toBe(0x01); expect(actionResponse.InvokeIdAndPriority).toBe(0xC3); expect(actionResponse.DataAcessResult).toBe(0x00); expect(actionResponse.ReturnParameters).toBe(0x01); expect(actionResponse.ParameterType).toBe(0x01); expect(actionResponse.DlmsData).toBeNull(); expect(actionResponse.GetDataAcessResult).toBe(0x05); }); test("should return the correct byte array with getBytes()", () => { const bytes = [ MessageType.ACTION_RESPONSE, 0x01, 0xC3, 0x00, 0x01, 0x00, // ParameterType 0x12, 0x34, 0x56, // DlmsData rawValue ]; const actionResponse = new ActionResponse(bytes); const result = actionResponse.getBytes(); expect(result).toEqual(Buffer.from(bytes)); }); test("should return the correct hexadecimal string with getHexString()", () => { const bytes = [ MessageType.ACTION_RESPONSE, 0x01, 0xC3, 0x00, 0x01, 0x00, // ParameterType 0x12, 0x34, 0x56, // DlmsData rawValue ]; const actionResponse = new ActionResponse(bytes); const hexString = actionResponse.getHexString(); const expectedHex = bytes .map(byte => byte.toString(16).toUpperCase().padStart(2, "0")) .join(" "); expect(hexString).toBe(expectedHex); }); });