UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

116 lines (98 loc) 4.76 kB
import GetRequest from "../src/messages/GetRequest"; import MessageType from "../src/enum/MessageType"; describe("GetRequest class", () => { const mockCosemAddress = { classId: [0x00, 0x01], instanceId: [0x00, 0x02, 0x03, 0x04, 0x05, 0x06], attributeId: [0x01], }; const mockDlmsData = { rawValue: [0x12, 0x34, 0x56], }; test("should initialize with default values when no parameters are provided", () => { const getRequest = new GetRequest(); expect(getRequest.setType).toBe(0x01); expect(getRequest.invokeIdAndPriority).toBe(0); expect(getRequest.cosemClassId).toEqual([0, 0]); expect(getRequest.cosemObjectInstanceId).toEqual([0, 0, 0, 0, 0, 0]); expect(getRequest.cosemObjectAttributeId).toEqual([0]); expect(getRequest.methodInvocationParameters).toBe(0); expect(getRequest.dlmsData).toBeNull(); expect(getRequest.value).toEqual([]); expect(getRequest.parameters).toEqual([]); }); test("should correctly set data with insertData using dlmsData", () => { const getRequest = new GetRequest(mockCosemAddress, mockDlmsData); expect(getRequest.invokeIdAndPriority).toBeGreaterThanOrEqual(0xC1); expect(getRequest.invokeIdAndPriority).toBeLessThanOrEqual(0xCF); expect(getRequest.cosemClassId).toEqual(mockCosemAddress.classId); expect(getRequest.cosemObjectInstanceId).toEqual(mockCosemAddress.instanceId); expect(getRequest.cosemObjectAttributeId).toEqual(mockCosemAddress.attributeId); expect(getRequest.methodInvocationParameters).toBe(1); expect(getRequest.dlmsData).toEqual(mockDlmsData); }); test("should correctly set data with insertData using parameters", () => { const hexString = "123456"; const getRequest = new GetRequest(mockCosemAddress, null, hexString); expect(getRequest.invokeIdAndPriority).toBeGreaterThanOrEqual(0xC1); expect(getRequest.invokeIdAndPriority).toBeLessThanOrEqual(0xCF); expect(getRequest.cosemClassId).toEqual(mockCosemAddress.classId); expect(getRequest.cosemObjectInstanceId).toEqual(mockCosemAddress.instanceId); expect(getRequest.cosemObjectAttributeId).toEqual(mockCosemAddress.attributeId); expect(getRequest.methodInvocationParameters).toBe(1); expect(getRequest.parameters).toEqual([0x12, 0x34, 0x56]); }); test("should return the correct byte array with getBytes (without relay)", () => { const getRequest = new GetRequest(mockCosemAddress, mockDlmsData); const result = getRequest.getBytes(); expect(result).toEqual([ MessageType.GET_REQUEST, 0x01, // setType getRequest.invokeIdAndPriority, ...mockCosemAddress.classId, ...mockCosemAddress.instanceId, ...mockCosemAddress.attributeId, 0x01, // methodInvocationParameters ...mockDlmsData.rawValue, ]); }); test("should return the correct byte array with getBytes (with relay)", () => { const getRequest = new GetRequest(mockCosemAddress, mockDlmsData); const result = getRequest.getBytes(true); // Relay enabled expect(result).toEqual([ MessageType.GET_REQUEST, 0x01, // setType getRequest.invokeIdAndPriority, ...mockCosemAddress.classId, ...mockCosemAddress.instanceId, ...mockCosemAddress.attributeId, 0x01, // methodInvocationParameters 0x87, // Relay additional byte ...mockDlmsData.rawValue, ]); }); test("should return the correct hexadecimal string with getHexString()", () => { const getRequest = new GetRequest(mockCosemAddress, mockDlmsData); getRequest.getBytes(); // Populate value const hexString = getRequest.getHexString(); const expectedHex = [ MessageType.GET_REQUEST, 0x01, // setType getRequest.invokeIdAndPriority, ...mockCosemAddress.classId, ...mockCosemAddress.instanceId, ...mockCosemAddress.attributeId, 0x01, // methodInvocationParameters ...mockDlmsData.rawValue, ] .map(byte => byte.toString(16).toUpperCase().padStart(2, '0')) .join(' '); expect(hexString).toBe(expectedHex); }); test("should convert hex string to byte array with _stringToBytes()", () => { const getRequest = new GetRequest(); const hexString = "123456"; const result = getRequest._stringToBytes(hexString); expect(result).toEqual([0x12, 0x34, 0x56]); }); });