dlms-protocol
Version:
DLMS Protocol parser for JavaScript
133 lines (107 loc) • 4.91 kB
JavaScript
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]);
});
});