UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

128 lines (105 loc) 5.06 kB
import SetRequest from "../src/messages/SetRequest"; import MessageType from "../src/enum/MessageType"; describe("SetRequest class", () => { const mockDlmsData = { totalBytes: 5, rawValue: [0x12, 0x34, 0x56, 0x78, 0x9A], }; const mockCosemAddress = { classId: [0x00, 0x01], instanceId: [0x02, 0x03, 0x04, 0x05, 0x06, 0x07], attributeId: [0x08], }; beforeEach(() => { jest.spyOn(global.Math, "random").mockReturnValue(0.5); // Mock random for consistent invokeId }); afterEach(() => { jest.spyOn(global.Math, "random").mockRestore(); }); test("should initialize with default values when no parameters are provided", () => { const setRequest = new SetRequest(); expect(setRequest.setType).toBe(0); expect(setRequest.invokeIdAndPriority).toBe(0); expect(setRequest.cosemClassId).toEqual([0, 0]); expect(setRequest.cosemObjectInstanceId).toEqual([0, 0, 0, 0, 0, 0]); expect(setRequest.cosemObjectAttributeId).toEqual([0]); expect(setRequest.selectiveAccessDescriptor).toBe(0); expect(setRequest.dlmsData).toBeNull(); expect(setRequest.value).toEqual([]); expect(setRequest.parameters).toEqual([]); }); test("should correctly initialize with dlmsData and cosemAddress", () => { const setRequest = new SetRequest(mockDlmsData, mockCosemAddress, 0x01); expect(setRequest.setType).toBe(0x01); // dlmsData.totalBytes < 127 expect(setRequest.invokeIdAndPriority).toBe(0xC8); // Mocked invokeId expect(setRequest.cosemClassId).toEqual(mockCosemAddress.classId); expect(setRequest.cosemObjectInstanceId).toEqual(mockCosemAddress.instanceId); expect(setRequest.cosemObjectAttributeId).toEqual(mockCosemAddress.attributeId); expect(setRequest.selectiveAccessDescriptor).toBe(0x01); expect(setRequest.dlmsData).toEqual(mockDlmsData); }); test("should correctly initialize with cosemAddress and parameters", () => { const hexParameters = "123456789A"; const setRequest = new SetRequest(null, mockCosemAddress, null, hexParameters); expect(setRequest.setType).toBe(0x01); expect(setRequest.invokeIdAndPriority).toBe(0xC8); // Mocked invokeId expect(setRequest.cosemClassId).toEqual(mockCosemAddress.classId); expect(setRequest.cosemObjectInstanceId).toEqual(mockCosemAddress.instanceId); expect(setRequest.cosemObjectAttributeId).toEqual(mockCosemAddress.attributeId); expect(setRequest.selectiveAccessDescriptor).toBe(0x00); expect(setRequest.parameters).toEqual([0x12, 0x34, 0x56, 0x78, 0x9A]); }); test("should return the correct byte array with getBytes() (dlmsData)", () => { const setRequest = new SetRequest(mockDlmsData, mockCosemAddress, 0x01); const result = setRequest.getBytes(); expect(result).toEqual([ MessageType.SET_REQUEST, 0x01, // setType 0xC8, // invokeIdAndPriority ...mockCosemAddress.classId, ...mockCosemAddress.instanceId, ...mockCosemAddress.attributeId, 0x01, // selectiveAccessDescriptor ...mockDlmsData.rawValue, ]); }); test("should return the correct byte array with getBytes() (parameters)", () => { const hexParameters = "123456789A"; const setRequest = new SetRequest(null, mockCosemAddress, null, hexParameters); const result = setRequest.getBytes(); expect(result).toEqual([ MessageType.SET_REQUEST, 0x01, // setType 0xC8, // invokeIdAndPriority ...mockCosemAddress.classId, ...mockCosemAddress.instanceId, ...mockCosemAddress.attributeId, 0x00, // selectiveAccessDescriptor 0x12, 0x34, 0x56, 0x78, 0x9A, // parameters ]); }); test("should return the correct hexadecimal string with getHexString()", () => { const setRequest = new SetRequest(mockDlmsData, mockCosemAddress, 0x01); setRequest.getBytes(); // Populate value const hexString = setRequest.getHexString(); const expectedHex = [ MessageType.SET_REQUEST, 0x01, // setType 0xC8, // invokeIdAndPriority ...mockCosemAddress.classId, ...mockCosemAddress.instanceId, ...mockCosemAddress.attributeId, 0x01, // selectiveAccessDescriptor ...mockDlmsData.rawValue, ] .map(byte => byte.toString(16).toUpperCase().padStart(2, "0")) .join(" "); expect(hexString).toBe(expectedHex); }); test("should correctly convert hex string to byte array with _stringToBytes()", () => { const setRequest = new SetRequest(); const hexString = "123456"; const result = setRequest._stringToBytes(hexString); expect(result).toEqual([0x12, 0x34, 0x56]); }); });