dlms-protocol
Version:
DLMS Protocol parser for JavaScript
102 lines (81 loc) • 3.35 kB
JavaScript
import ReadResponse from "../src/messages/ReadResponse";
import DlmsDatas from "../src/typesDLMS/DlmsDatas";
jest.mock("../src/typesDLMS/DlmsDatas");
describe("ReadResponse class", () => {
beforeEach(() => {
DlmsDatas.factory.mockClear();
});
const mockDlmsData = {
insertData: jest.fn(),
totalBytes: 4,
};
DlmsDatas.factory.mockReturnValue(mockDlmsData);
test("should initialize with default values when no bytes are provided", () => {
const readResponse = new ReadResponse();
expect(readResponse.qty).toBe(0);
expect(readResponse.parameterType).toBe(0);
expect(readResponse.dlmsData).toBeNull();
expect(readResponse.dataAccessResult).toBeNull();
expect(readResponse.value).toEqual([]);
});
test("should correctly parse bytes with parameterType = 0 (DlmsData)", () => {
const bytes = [
0x01, // Message type
0x01, // qty
0x00, // parameterType (DlmsData)
0x02, // DlmsData type
0xAA, 0xBB, 0xCC, 0xDD, // DlmsData raw bytes
];
const readResponse = new ReadResponse(bytes);
expect(readResponse.qty).toBe(1);
expect(readResponse.parameterType).toBe(0);
expect(readResponse.dlmsData).toEqual(mockDlmsData);
expect(mockDlmsData.insertData).toHaveBeenCalledWith([0x02, 0xAA, 0xBB, 0xCC, 0xDD]);
expect(readResponse.dataAccessResult).toBeNull();
});
test("should correctly parse bytes with parameterType != 0 (DataAccessResult)", () => {
const bytes = [
0x01, // Message type
0x01, // qty
0x01, // parameterType (DataAccessResult)
0x05, // dataAccessResult
];
const readResponse = new ReadResponse(bytes);
expect(readResponse.qty).toBe(1);
expect(readResponse.parameterType).toBe(1);
expect(readResponse.dlmsData).toBeNull();
expect(readResponse.dataAccessResult).toBe(0x05);
});
test("should return the correct hexadecimal string with getHexString()", () => {
const bytes = [
0x01, // Message type
0x01, // qty
0x00, // parameterType (DlmsData)
0x02, // DlmsData type
0xAA, 0xBB, 0xCC, 0xDD, // DlmsData raw bytes
];
const readResponse = new ReadResponse(bytes);
const hexString = readResponse.getHexString();
const expectedHex = bytes
.map(byte => byte.toString(16).toUpperCase().padStart(2, "0"))
.join(" ");
expect(hexString).toBe(expectedHex);
});
test("should throw an error when calling getBytes()", () => {
const readResponse = new ReadResponse();
expect(() => readResponse.getBytes()).toThrow("Method not implemented.");
});
test("should throw an error if DlmsDatas.factory fails", () => {
DlmsDatas.factory.mockImplementation(() => {
throw new Error("Factory error");
});
const bytes = [
0x01, // Message type
0x01, // qty
0x00, // parameterType (DlmsData)
0x02, // DlmsData type
0xAA, 0xBB, 0xCC, 0xDD, // DlmsData raw bytes
];
expect(() => new ReadResponse(bytes)).toThrow("Factory error");
});
});