dlms-protocol
Version:
DLMS Protocol parser for JavaScript
115 lines (97 loc) • 3.9 kB
JavaScript
import GetResponse from "../src/messages/GetResponse";
import DlmsDatas from "../src/typesDLMS/DlmsDatas";
jest.mock("../src/typesDLMS/DlmsDatas");
describe("GetResponse class", () => {
beforeEach(() => {
DlmsDatas.factory.mockClear();
});
const mockDlmsData = {
insertData: jest.fn(),
rawValue: [0x12, 0x34, 0x56],
};
DlmsDatas.factory.mockReturnValue(mockDlmsData);
test("should initialize with default values when no bytes are provided", () => {
const getResponse = new GetResponse();
expect(getResponse.setType).toBe(0);
expect(getResponse.invokeIdAndPriority).toBe(0);
expect(getResponse.parameterType).toBe(0);
expect(getResponse.accessResult).toBeNull();
expect(getResponse.dlmsData).toBeNull();
expect(getResponse.value).toEqual([]);
});
test("should correctly parse bytes with parameterType = 0 (DlmsData)", () => {
const bytes = [
0x01, // Message type
0x02, // setType
0xC3, // invokeIdAndPriority
0x00, // parameterType
0x01, // DlmsData type
0xA1, 0xB2, 0xC3, // DlmsData rawValue
];
const getResponse = new GetResponse(bytes);
expect(getResponse.setType).toBe(0x02);
expect(getResponse.invokeIdAndPriority).toBe(0xC3);
expect(getResponse.parameterType).toBe(0x00);
expect(getResponse.dlmsData).toEqual(mockDlmsData);
expect(mockDlmsData.insertData).toHaveBeenCalledWith([0x01, 0xA1, 0xB2, 0xC3]);
expect(getResponse.accessResult).toBeNull();
});
test("should correctly parse bytes with parameterType != 0 (accessResult)", () => {
const bytes = [
0x01, // Message type
0x02, // setType
0xC3, // invokeIdAndPriority
0x01, // parameterType
0x05, // accessResult
];
const getResponse = new GetResponse(bytes);
expect(getResponse.setType).toBe(0x02);
expect(getResponse.invokeIdAndPriority).toBe(0xC3);
expect(getResponse.parameterType).toBe(0x01);
expect(getResponse.accessResult).toBe(0x05);
expect(getResponse.dlmsData).toBeNull();
});
test("should return the correct byte array with getBytes()", () => {
const bytes = [
0x01, // Message type
0x02, // setType
0xC3, // invokeIdAndPriority
0x00, // parameterType
0x01, // DlmsData type
0xA1, 0xB2, 0xC3, // DlmsData rawValue
];
const getResponse = new GetResponse(bytes);
const result = getResponse.getBytes();
expect(result).toEqual(bytes);
});
test("should return the correct hexadecimal string with getHexString()", () => {
const bytes = [
0x01, // Message type
0x02, // setType
0xC3, // invokeIdAndPriority
0x00, // parameterType
0x01, // DlmsData type
0xA1, 0xB2, 0xC3, // DlmsData rawValue
];
const getResponse = new GetResponse(bytes);
const hexString = getResponse.getHexString();
const expectedHex = bytes
.map(byte => byte.toString(16).toUpperCase().padStart(2, '0'))
.join(' ');
expect(hexString).toBe(expectedHex);
});
test("should throw an error if DlmsDatas.factory fails", () => {
DlmsDatas.factory.mockImplementation(() => {
throw new Error("Factory error");
});
const bytes = [
0x01, // Message type
0x02, // setType
0xC3, // invokeIdAndPriority
0x00, // parameterType
0x01, // DlmsData type
0xA1, 0xB2, 0xC3, // DlmsData rawValue
];
expect(() => new GetResponse(bytes)).toThrow("Factory error");
});
});