UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

112 lines (91 loc) 4.67 kB
import ActionRequest from "../src/messages/ActionRequest"; import MessageType from "../src/enum/MessageType"; describe("ActionRequest class", () => { const mockCosemAddress = { Classid: [0x00, 0x01], Instanceid: [0x00, 0x02, 0x00, 0x03], Attributeid: [0x01] }; const mockDlmsData = { RawValue: [0x12, 0x34, 0x56] }; test("should initialize with default values when no parameters are provided", () => { const actionRequest = new ActionRequest(mockCosemAddress); expect(actionRequest.SetType).toBe(0x01); expect(actionRequest.invokeIdAndPriority).toBeGreaterThanOrEqual(0xC1); expect(actionRequest.invokeIdAndPriority).toBeLessThanOrEqual(0xCF); expect(actionRequest.CosemClassId).toEqual(mockCosemAddress.Classid); expect(actionRequest.CosemObjectInstanceId).toEqual(mockCosemAddress.Instanceid); expect(actionRequest.CosemObjectAttributeId).toEqual(mockCosemAddress.Attributeid); expect(actionRequest.MethodInvocationParameters).toBe(0); }); test("should initialize with parameters provided as a hex string", () => { const parameters = "123456"; const actionRequest = new ActionRequest(mockCosemAddress, parameters); expect(actionRequest.MethodInvocationParameters).toBe(1); expect(actionRequest.Parameters).toEqual([0x12, 0x34, 0x56]); }); test("should initialize with dlmsData provided", () => { const actionRequest = new ActionRequest(mockCosemAddress, null, mockDlmsData); expect(actionRequest.MethodInvocationParameters).toBe(1); expect(actionRequest.DlmsData).toEqual(mockDlmsData); }); test("should throw an error if insertData() is called", () => { const actionRequest = new ActionRequest(mockCosemAddress); expect(() => actionRequest.insertData([])).toThrow("Method not implemented"); }); test("should correctly set data with insertDataWithAddress()", () => { const actionRequest = new ActionRequest(mockCosemAddress); const newCosemAddress = { Classid: [0x10, 0x20], Instanceid: [0x30, 0x40, 0x50, 0x60], Attributeid: [0x02] }; actionRequest.insertDataWithAddress(newCosemAddress); expect(actionRequest.CosemClassId).toEqual(newCosemAddress.Classid); expect(actionRequest.CosemObjectInstanceId).toEqual(newCosemAddress.Instanceid); expect(actionRequest.CosemObjectAttributeId).toEqual(newCosemAddress.Attributeid); expect(actionRequest.MethodInvocationParameters).toBe(0); }); test("should correctly set data with insertDataWithDlms()", () => { const actionRequest = new ActionRequest(mockCosemAddress); actionRequest.insertDataWithDlms(mockCosemAddress, mockDlmsData); expect(actionRequest.CosemClassId).toEqual(mockCosemAddress.Classid); expect(actionRequest.CosemObjectInstanceId).toEqual(mockCosemAddress.Instanceid); expect(actionRequest.CosemObjectAttributeId).toEqual(mockCosemAddress.Attributeid); expect(actionRequest.MethodInvocationParameters).toBe(1); expect(actionRequest.DlmsData).toEqual(mockDlmsData); }); test("should return the correct byte array with getBytes()", () => { const actionRequest = new ActionRequest(mockCosemAddress, null, mockDlmsData); const result = actionRequest.getBytes(); expect(result).toEqual([ MessageType.ACTION_REQUEST, 0x01, // SetType expect.any(Number), // invokeIdAndPriority (randomized) ...mockCosemAddress.Classid, ...mockCosemAddress.Instanceid, ...mockCosemAddress.Attributeid, 0x01, // MethodInvocationParameters ...mockDlmsData.RawValue ]); }); test("should return the correct hexadecimal string with getHexString()", () => { const actionRequest = new ActionRequest(mockCosemAddress, null, mockDlmsData); actionRequest.getBytes(); // Ensure Value is populated const hexString = actionRequest.getHexString(); const expectedHex = [ MessageType.ACTION_REQUEST, 0x01, // SetType actionRequest.invokeIdAndPriority, ...mockCosemAddress.Classid, ...mockCosemAddress.Instanceid, ...mockCosemAddress.Attributeid, 0x01, // MethodInvocationParameters ...mockDlmsData.RawValue ] .map(byte => byte.toString(16).padStart(2, "0").toUpperCase()) .join(" "); expect(hexString).toBe(expectedHex); }); });