UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

133 lines (107 loc) 4.91 kB
import WriteRequest from "../src/messages/WriteRequest"; import MessageType from "../src/enum/MessageType"; describe("WriteRequest class", () => { const mockData = { rawValue: [0x12, 0x34, 0x56], }; beforeEach(() => { jest.clearAllMocks(); }); test("should initialize with default values when no parameters are provided", () => { const request = new WriteRequest(); expect(request.variableAccessSpecificationQty).toBe(0x01); expect(request.variableAccessSpecification).toBe(0x02); expect(request.variableName).toBeNull(); expect(request.dataQty).toBe(0x00); expect(request.data).toBeNull(); expect(request.value).toEqual([]); expect(request.parameters).toEqual([]); expect(request.variableParameters).toEqual([]); }); test("should correctly initialize with data and variableName", () => { const variableName = "1234"; const request = new WriteRequest(mockData, variableName); expect(request.variableAccessSpecificationQty).toBe(0x01); expect(request.variableAccessSpecification).toBe(0x02); expect(request.variableName).toBe(variableName); expect(request.dataQty).toBe(0x01); expect(request.data).toEqual(mockData); expect(request.value).toEqual([]); expect(request.parameters).toEqual([]); expect(request.variableParameters).toEqual([0x12, 0x34]); }); test("should correctly initialize with parameters", () => { const parameters = "56789A"; const request = new WriteRequest(null, null, parameters); expect(request.variableAccessSpecificationQty).toBe(0x01); expect(request.variableAccessSpecification).toBe(0x02); expect(request.variableName).toBeNull(); expect(request.dataQty).toBe(0x00); expect(request.parameters).toEqual([0x56, 0x78, 0x9A]); expect(request.variableParameters).toEqual([]); }); test("should return the correct byte array with getBytes()", () => { const variableName = "1234"; const request = new WriteRequest(mockData, variableName); const result = request.getBytes(); expect(result).toEqual([ MessageType.WRITE_REQUEST, 0x01, // variableAccessSpecificationQty 0x02, // variableAccessSpecification 0x12, 0x34, // variableParameters (parsed from variableName) 0x01, // dataQty ...mockData.rawValue, // data.rawValue ]); }); test("should handle parameters correctly in getBytes()", () => { const parameters = "56789A"; const request = new WriteRequest(null, null, parameters); const result = request.getBytes(); expect(result).toEqual([ MessageType.WRITE_REQUEST, 0x01, // variableAccessSpecificationQty 0x02, // variableAccessSpecification 0x00, 0x00, // No variableName, defaults to 0 0x00, // dataQty 0x56, 0x78, 0x9A, // parameters ]); }); test("should return the correct hexadecimal string with getHexString()", () => { const variableName = "1234"; const request = new WriteRequest(mockData, variableName); request.getBytes(); // Populate value const hexString = request.getHexString(); const expectedHex = [ MessageType.WRITE_REQUEST, 0x01, // variableAccessSpecificationQty 0x02, // variableAccessSpecification 0x12, 0x34, // variableParameters (parsed from variableName) 0x01, // dataQty ...mockData.rawValue, // data.rawValue ] .map(byte => byte.toString(16).toUpperCase().padStart(2, "0")) .join(" "); expect(hexString).toBe(expectedHex); }); test("should throw an error when calling insertData()", () => { const request = new WriteRequest(); expect(() => request.insertData([])).toThrow("Method not implemented."); }); test("should correctly insert data from objects with insertDataFromObjects()", () => { const variableName = "1234"; const data = mockData; const request = new WriteRequest(); request.insertDataFromObjects(data, variableName); expect(request.variableAccessSpecificationQty).toBe(0x01); expect(request.variableAccessSpecification).toBe(0x02); expect(request.variableName).toBe(variableName); expect(request.dataQty).toBe(0x01); expect(request.data).toBe(data); }); test("should correctly convert hex string to byte array with _stringToBytes()", () => { const request = new WriteRequest(); const hexString = "123456"; const result = request._stringToBytes(hexString); expect(result).toEqual([0x12, 0x34, 0x56]); }); });