added messages list, new client form, logic for client Apps plus others
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
import TabulatorFull from "../../../src/js/core/TabulatorFull";
|
||||
import SelectRange from "../../../src/js/modules/SelectRange/SelectRange";
|
||||
|
||||
describe("SelectRange module", () => {
|
||||
/** @type {TabulatorFull} */
|
||||
let tabulator;
|
||||
/** @type {SelectRange} */
|
||||
let selectRangeMod;
|
||||
let tableData = [
|
||||
{ id: 1, name: "John", age: 30, position: "Manager" },
|
||||
{ id: 2, name: "Jane", age: 25, position: "Developer" },
|
||||
{ id: 3, name: "Bob", age: 35, position: "Designer" }
|
||||
];
|
||||
let tableColumns = [
|
||||
{ title: "ID", field: "id" },
|
||||
{ title: "Name", field: "name" },
|
||||
{ title: "Age", field: "age" },
|
||||
{ title: "Position", field: "position" }
|
||||
];
|
||||
|
||||
beforeEach(async () => {
|
||||
const el = document.createElement("div");
|
||||
el.id = "tabulator";
|
||||
document.body.appendChild(el);
|
||||
tabulator = new TabulatorFull("#tabulator", {
|
||||
data: tableData,
|
||||
columns: tableColumns,
|
||||
selectableRange: true,
|
||||
});
|
||||
selectRangeMod = tabulator.module("selectRange");
|
||||
return new Promise((resolve) => {
|
||||
tabulator.on("tableBuilt", () => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
tabulator.destroy();
|
||||
document.getElementById("tabulator")?.remove();
|
||||
});
|
||||
|
||||
it("should have one range initially at the top left", () => {
|
||||
const range = selectRangeMod.getRanges()[0]._range;
|
||||
expect(range.top).toBe(0);
|
||||
expect(range.left).toBe(0);
|
||||
expect(range.bottom).toBe(0);
|
||||
expect(range.right).toBe(0);
|
||||
});
|
||||
|
||||
it("should add a new range when addRange is called", () => {
|
||||
const initialRangesCount = selectRangeMod.getRanges().length;
|
||||
selectRangeMod.addRange();
|
||||
expect(selectRangeMod.getRanges().length).toBe(initialRangesCount + 1);
|
||||
});
|
||||
|
||||
it("should reset ranges when resetRanges is called", () => {
|
||||
// Add multiple ranges
|
||||
selectRangeMod.addRange();
|
||||
selectRangeMod.addRange();
|
||||
|
||||
// Reset ranges
|
||||
const resetRange = selectRangeMod.resetRanges();
|
||||
|
||||
// Should have only one range after reset
|
||||
expect(selectRangeMod.getRanges().length).toBe(1);
|
||||
expect(resetRange).toBe(selectRangeMod.getRanges()[0]._range);
|
||||
});
|
||||
|
||||
it("should have correct structure in RangeComponent", () => {
|
||||
const rangeComponent = selectRangeMod.getRanges()[0];
|
||||
|
||||
// Test component properties
|
||||
expect(rangeComponent._range).toBeDefined();
|
||||
expect(typeof rangeComponent.getElement).toBe("function");
|
||||
expect(typeof rangeComponent.getData).toBe("function");
|
||||
expect(typeof rangeComponent.getCells).toBe("function");
|
||||
expect(typeof rangeComponent.getRows).toBe("function");
|
||||
expect(typeof rangeComponent.getColumns).toBe("function");
|
||||
});
|
||||
|
||||
it("should have correct min/max values", () => {
|
||||
const range = selectRangeMod.getRanges()[0]._range;
|
||||
|
||||
// The min/max values should match the start/end values after they're set
|
||||
range.setStart(1, 2);
|
||||
range.setEnd(3, 4);
|
||||
|
||||
expect(range.top).toBe(1);
|
||||
expect(range.bottom).toBe(3);
|
||||
expect(range.left).toBe(2);
|
||||
expect(range.right).toBe(4);
|
||||
});
|
||||
|
||||
it("should handle Range setStart and setEnd", () => {
|
||||
const range = selectRangeMod.getRanges()[0]._range;
|
||||
|
||||
// Initial values
|
||||
expect(range.start.row).toBeUndefined();
|
||||
expect(range.start.col).toBeUndefined();
|
||||
expect(range.end.row).toBeUndefined();
|
||||
expect(range.end.col).toBeUndefined();
|
||||
|
||||
// Set start
|
||||
range.setStart(1, 2);
|
||||
expect(range.start.row).toBe(1);
|
||||
expect(range.start.col).toBe(2);
|
||||
|
||||
// Set end
|
||||
range.setEnd(3, 4);
|
||||
expect(range.end.row).toBe(3);
|
||||
expect(range.end.col).toBe(4);
|
||||
});
|
||||
|
||||
it("should detect overlaps correctly", () => {
|
||||
const range = selectRangeMod.getRanges()[0]._range;
|
||||
|
||||
// Setup range bounds
|
||||
range.top = 1;
|
||||
range.bottom = 3;
|
||||
range.left = 2;
|
||||
range.right = 4;
|
||||
|
||||
// Test overlapping case
|
||||
expect(range.overlaps(1, 1, 5, 5)).toBe(true);
|
||||
expect(range.overlaps(3, 3, 5, 5)).toBe(true);
|
||||
|
||||
// Test non-overlapping cases
|
||||
expect(range.overlaps(5, 5, 7, 7)).toBe(false);
|
||||
expect(range.overlaps(0, 0, 0, 0)).toBe(false);
|
||||
});
|
||||
|
||||
it("should handle destroyedGuard", () => {
|
||||
const range = selectRangeMod.getRanges()[0]._range;
|
||||
|
||||
// Should return true when not destroyed
|
||||
expect(range.destroyedGuard("testFunction")).toBe(true);
|
||||
|
||||
// Test warning message when destroyed
|
||||
const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation();
|
||||
range.destroyed = true;
|
||||
expect(range.destroyedGuard("testFunction")).toBe(false);
|
||||
expect(consoleWarnSpy).toHaveBeenCalled();
|
||||
|
||||
// Clean up
|
||||
consoleWarnSpy.mockRestore();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user