dlms-protocol
Version:
DLMS Protocol parser for JavaScript
78 lines (62 loc) • 3.1 kB
JavaScript
import DlmsDataType from "../src/enum/DlmsDataType";
import DlmsDatas from "../src/typesDLMS/DlmsDatas";
import DlmsArrayStruct from "../src/typesDLMS/DlmsArrayStruct";
jest.mock("../src/typesDLMS/DlmsDatas"); // Mock da classe DlmsDatas
describe("DlmsArrayStruct class", () => {
beforeEach(() => {
DlmsDatas.factory.mockClear();
});
test("should initialize with default values when no data is provided", () => {
const dlmsStruct = new DlmsArrayStruct();
expect(dlmsStruct.tag).toBe(DlmsDataType.STRUCT);
expect(dlmsStruct.totalBytes).toBe(0);
expect(dlmsStruct.rawValue).toEqual([]);
expect(dlmsStruct.bodyBytes).toEqual([]);
expect(dlmsStruct.size).toBe(0);
expect(dlmsStruct.value).toEqual([]);
});
test("should throw an error if tag does not match when inserting data", () => {
const data = [0xFF, 2]; // Tag inválida
const dlmsStruct = new DlmsArrayStruct();
expect(() => dlmsStruct.insertData(data)).toThrow("Tag mismatch.");
});
test("should correctly parse data with insertData()", () => {
// Mockando um item de DlmsDatas
const mockDlmsData = {
totalBytes: 2,
rawValue: [0x02, 0x01],
insertData: jest.fn(),
};
DlmsDatas.factory.mockReturnValueOnce(mockDlmsData);
const data = [DlmsDataType.STRUCT, 1, 0x02, 0x01];
const dlmsStruct = new DlmsArrayStruct();
dlmsStruct.insertData(data);
expect(dlmsStruct.size).toBe(1);
expect(dlmsStruct.bodyBytes).toEqual([0x02, 0x01]);
expect(dlmsStruct.value.length).toBe(1);
expect(dlmsStruct.value[0]).toBe(mockDlmsData);
expect(dlmsStruct.rawValue).toEqual([DlmsDataType.STRUCT, 1, 0x02, 0x01]);
expect(dlmsStruct.totalBytes).toBe(4);
expect(mockDlmsData.insertData).toHaveBeenCalledWith([0x02, 0x01]);
});
test("should correctly insert data from a list of DlmsDatas with insertDataFromList()", () => {
const mockDlmsData1 = { rawValue: [0x02, 0x01] };
const mockDlmsData2 = { rawValue: [0x03, 0x04] };
const dlmsStruct = new DlmsArrayStruct();
dlmsStruct.insertDataFromList([mockDlmsData1, mockDlmsData2]);
expect(dlmsStruct.size).toBe(2);
expect(dlmsStruct.bodyBytes).toEqual([0x02, 0x01, 0x03, 0x04]);
expect(dlmsStruct.value).toEqual([mockDlmsData1, mockDlmsData2]);
expect(dlmsStruct.rawValue).toEqual([DlmsDataType.STRUCT, 2, 0x02, 0x01, 0x03, 0x04]);
expect(dlmsStruct.totalBytes).toBe(6);
});
test("should return the correct value with getValue()", () => {
const mockDlmsData = { rawValue: [0x02, 0x01] };
const dlmsStruct = new DlmsArrayStruct(null, [mockDlmsData]);
expect(dlmsStruct.getValue()).toEqual([mockDlmsData]);
});
test("should throw an error if getStandardLength() is called", () => {
const dlmsStruct = new DlmsArrayStruct();
expect(() => dlmsStruct.getStandardLength()).toThrow("Method not implemented.");
});
});