import { cleanup, sandbox, waitEvent } from "./utils/utils"; import { GroupManager } from "../../src/GroupManager"; import { SampleGrid } from "./samples/SampleGrid"; import { InfiniteGridItem } from "../../src/InfiniteGridItem"; import { toArray } from "../../src/utils"; describe("test GroupManager", () => { let manager: GroupManager | null; let container: HTMLElement | null; beforeEach(() => { container = sandbox({ class: "sample-container" })!; container!.style.cssText = ""; }); afterEach(() => { if (manager) { manager!.destroy(); } manager = null; container = null; cleanup(); }); describe("Initialzation", () => { it("should check if container elements are the same", () => { // Given manager = new GroupManager(container!, { gridConstructor: SampleGrid, gridOptions: {}, }); // When, Then expect(manager!.getContainerElement()).to.be.equals(container); }); }); describe("test rendering", () => { beforeEach(() => { // Given container!.innerHTML = `
1
2
3
4
5
6
`; manager = new GroupManager(container!, { gridConstructor: SampleGrid, gridOptions: {}, }); const children = toArray(container!.children); // 0 0 0 1 1 1 manager!.syncItems(children.map((child, i) => { return new InfiniteGridItem(false, { groupKey: Math.floor(i / 3), key: i, element: child, }); })); }); it("should check if items are rendered", async () => { // Given const children = toArray(container!.children); // When manager!.setCursors(0, 1); manager!.renderItems(); await waitEvent(manager!, "renderComplete"); // Then expect(manager!.getItems().map((item) => item.groupKey)).to.be.deep.equals([0, 0, 0, 1, 1, 1]); expect(manager!.getGroups().map((group) => group.groupKey)).to.be.deep.equals([0, 1]); expect(manager!.getVisibleGroups().map((group) => group.groupKey)).to.be.deep.equals([0, 1]); expect(manager!.getOutlines().end).to.be.deep.equals([108]); children.forEach((child, i) => { expect(child.style.top).to.be.equals(`${i * 18}px`); }); }); it("should check if only visible items are rendered", async () => { // Given const children = toArray(container!.children); // When manager!.setCursors(0, 0); manager!.renderItems(); await waitEvent(manager!, "renderComplete"); // Then expect(manager!.getItems().map((item) => item.groupKey)).to.be.deep.equals([0, 0, 0]); expect(manager!.getGroups().map((group) => group.groupKey)).to.be.deep.equals([0, 1]); expect(manager!.getVisibleGroups().map((group) => group.groupKey)).to.be.deep.equals([0]); expect(manager!.getOutlines().end).to.be.deep.equals([54]); children.slice(0, 3).forEach((child, i) => { expect(child.style.top).to.be.equals(`${i * 18}px`); }); children.slice(3, 6).forEach((child) => { expect(child.style.top).to.be.equals(``); }); }); it("should check whether invisible items are remembered after rendering all items", async () => { // Given const children = toArray(container!.children); // render all manager!.setCursors(0, 1); manager!.renderItems(); await waitEvent(manager!, "renderComplete"); // When // render some items manager!.setCursors(1, 1); manager!.renderItems(); await waitEvent(manager!, "renderComplete"); // Then expect(manager!.getItems().map((item) => item.groupKey)).to.be.deep.equals([1, 1, 1]); expect(manager!.getGroups().map((group) => group.groupKey)).to.be.deep.equals([0, 1]); expect(manager!.getVisibleGroups().map((group) => group.groupKey)).to.be.deep.equals([1]); expect(manager!.getOutlines().end).to.be.deep.equals([108]); children.forEach((child, i) => { expect(child.style.top).to.be.equals(`${i * 18}px`); }); }); it("should check whether it is rendered after changing options", async () => { // Given const children = toArray(container!.children); manager!.setCursors(0, 1); manager!.renderItems(); await waitEvent(manager!, "renderComplete"); // When manager!.gridOptions = { gap: 5, }; manager!.renderItems(); await waitEvent(manager!, "renderComplete"); // Then expect(manager!.getOutlines().end).to.be.deep.equals([138]); children.forEach((child, i) => { expect(child.style.top).to.be.equals(`${i * 23}px`); }); }); }); });