Skip to content

Commit 24c1f83

Browse files
committed
Add test for drag and drop handler
1 parent 407353e commit 24c1f83

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import { mockElementBoundingClientRect } from "jsdom-testing-mocks";
2+
3+
import { DragAndDropHandler } from "../../dragAndDropHandler";
4+
import { Node } from "../../node";
5+
import NodeElement from "../../nodeElement";
6+
import { Position } from "../../position";
7+
8+
describe(".refresh", () => {
9+
it("generates hit areas if there is a current item", () => {
10+
const getNodeElementForNode = jest.fn();
11+
const getScrollLeft = jest.fn();
12+
const openNode = jest.fn();
13+
const refreshElements = jest.fn();
14+
const triggerEvent = jest.fn();
15+
16+
const elementForTree = document.createElement("div");
17+
document.body.append(elementForTree);
18+
19+
jest.spyOn(elementForTree, "clientHeight", "get").mockReturnValue(50);
20+
jest.spyOn(elementForTree, "clientWidth", "get").mockReturnValue(40);
21+
22+
const elementForNode1 = document.createElement("div");
23+
elementForTree.append(elementForNode1);
24+
const elementForNode2 = document.createElement("div");
25+
elementForTree.append(elementForNode2);
26+
27+
jest.spyOn(elementForNode1, "offsetParent", "get").mockReturnValue(
28+
elementForTree,
29+
);
30+
jest.spyOn(elementForNode2, "offsetParent", "get").mockReturnValue(
31+
elementForTree,
32+
);
33+
34+
mockElementBoundingClientRect(elementForTree, {
35+
height: 40,
36+
width: 50,
37+
x: 0,
38+
y: 0,
39+
});
40+
41+
mockElementBoundingClientRect(elementForNode1, {
42+
height: 20,
43+
width: 50,
44+
x: 0,
45+
y: 0,
46+
});
47+
48+
mockElementBoundingClientRect(elementForNode2, {
49+
height: 20,
50+
width: 50,
51+
x: 0,
52+
y: 20,
53+
});
54+
55+
const tree = new Node({ isRoot: true });
56+
57+
const node1 = new Node({ name: "node1" });
58+
node1.element = elementForNode1;
59+
tree.addChild(node1);
60+
61+
const node2 = new Node({ name: "node2" });
62+
node2.element = elementForNode2;
63+
tree.addChild(node2);
64+
65+
const nodeElement1 = new NodeElement({
66+
getScrollLeft,
67+
node: node1,
68+
treeElement: elementForTree,
69+
});
70+
71+
const nodeElement2 = new NodeElement({
72+
getScrollLeft,
73+
node: node2,
74+
treeElement: elementForTree,
75+
});
76+
77+
const getNodeElement = jest.fn((element) => {
78+
if (element == elementForNode1) {
79+
return nodeElement1;
80+
} else if (element == elementForNode2) {
81+
return nodeElement2;
82+
} else {
83+
return null;
84+
}
85+
});
86+
87+
const getTree = jest.fn(() => tree);
88+
89+
const dragAndDropHandler = new DragAndDropHandler({
90+
getNodeElement,
91+
getNodeElementForNode,
92+
getScrollLeft,
93+
getTree,
94+
openFolderDelay: false,
95+
openNode,
96+
refreshElements,
97+
slide: false,
98+
treeElement: elementForTree,
99+
triggerEvent,
100+
});
101+
102+
// Set current item
103+
const positionInfo = {
104+
originalEvent: new Event("click"),
105+
pageX: 10,
106+
pageY: 10,
107+
target: elementForNode1,
108+
};
109+
110+
dragAndDropHandler.mouseCapture(positionInfo);
111+
expect(dragAndDropHandler.currentItem).toBe(nodeElement1);
112+
113+
// Call refresh
114+
dragAndDropHandler.refresh();
115+
116+
expect(dragAndDropHandler.hitAreas).toMatchObject([
117+
expect.objectContaining({
118+
bottom: 43,
119+
node: node2,
120+
position: Position.Inside,
121+
top: 20,
122+
}),
123+
expect.objectContaining({
124+
bottom: 66,
125+
node: node2,
126+
position: Position.After,
127+
top: 43,
128+
}),
129+
]);
130+
});
131+
});

0 commit comments

Comments
 (0)