Skip to content
This repository was archived by the owner on Sep 20, 2021. It is now read-only.

Commit 64cbe0c

Browse files
authored
Merge pull request #64 from snowcoders/k2snowman69/addTests
Added some unit tests
2 parents 7c9aed2 + e16807c commit 64cbe0c

8 files changed

+478
-11
lines changed

.vscode/settings.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
{
2-
"editor.formatOnSave": true
3-
}
2+
"editor.formatOnSave": true,
3+
"editor.tabSize": 2,
4+
"sortier.onSave": true
5+
}

src/component.test.tsx

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/example.test.tsx

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import * as React from "react";
2+
3+
import { Popover, PopoverProps } from "./popover";
4+
5+
import { configure, shallow } from "enzyme";
6+
7+
// Configure enzyme
8+
import Adapter = require("enzyme-adapter-react-16");
9+
configure({ adapter: new Adapter() });
10+
11+
describe("External example", () => {
12+
let defaultProps: PopoverProps;
13+
let spy: jest.Mock<any>;
14+
15+
beforeEach(() => {
16+
spy = jest.fn();
17+
defaultProps = {
18+
popperContent: (
19+
<div className="globally_unique_classname">
20+
<div>
21+
This is a more complex example to show off how to unit test the
22+
content that exists within the Popover component
23+
</div>
24+
<div>
25+
<button onClick={spy}>Hi</button>
26+
</div>
27+
</div>
28+
),
29+
popperType: "hover",
30+
targetContent: (
31+
<span>
32+
<i>Icon</i>
33+
</span>
34+
),
35+
targetType: "hover"
36+
};
37+
});
38+
39+
it("Calls spy when button is clicked", () => {
40+
// Render and find the popper content
41+
let wrapper = shallow(<Popover {...defaultProps} />);
42+
let popperContent = wrapper.find(".globally_unique_classname");
43+
expect(popperContent).toHaveLength(1);
44+
45+
// Click the button that triggers the spy
46+
let onClick = popperContent.find("button").props().onClick;
47+
if (onClick != null) {
48+
onClick({} as any);
49+
} else {
50+
throw new Error(
51+
"Button onclick should be defined in test initialization"
52+
);
53+
}
54+
55+
expect(spy).toHaveBeenCalled();
56+
});
57+
});

src/popover.test.tsx

Lines changed: 296 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,296 @@
1+
import * as React from "react";
2+
3+
import { Popover, PopoverProps } from "./popover";
4+
import { PopperHover } from "./popper.hover";
5+
import { TargetHover } from "./target.hover";
6+
7+
import { configure, shallow } from "enzyme";
8+
9+
// Configure enzyme
10+
import Adapter = require("enzyme-adapter-react-16");
11+
import { PopperBlur } from "./popper.blur";
12+
import { PopperClick } from "./popper.click";
13+
import { TargetClick } from "./target.click";
14+
configure({ adapter: new Adapter() });
15+
16+
describe("Popover", () => {
17+
let defaultProps: PopoverProps;
18+
19+
beforeEach(() => {
20+
defaultProps = {
21+
popperContent: "Popper content",
22+
popperType: "hover",
23+
targetContent: "Target content",
24+
targetType: "hover"
25+
};
26+
});
27+
28+
it("Renders", () => {
29+
let wrapper = shallow(<Popover {...defaultProps} />);
30+
let targetHover = wrapper.find(TargetHover);
31+
let popperHover = wrapper.find(PopperHover);
32+
33+
expect(targetHover).toEqual(wrapper.childAt(0));
34+
expect(popperHover).toEqual(wrapper.childAt(1));
35+
});
36+
37+
it("Renders with wrapper", () => {
38+
defaultProps = {
39+
...defaultProps,
40+
wrapperElementProps: {
41+
className: "wrapper"
42+
},
43+
wrapperElementType: "div"
44+
};
45+
let wrapper = shallow(<Popover {...defaultProps} />);
46+
let targetHover = wrapper.find(TargetHover);
47+
let popperHover = wrapper.find(PopperHover);
48+
49+
let wrapperElement = wrapper.childAt(0);
50+
expect(wrapperElement.name()).toBe("div");
51+
expect(wrapperElement.hasClass("wrapper")).toBe(true);
52+
53+
expect(targetHover).toEqual(wrapperElement.childAt(0));
54+
expect(popperHover).toEqual(wrapperElement.childAt(1));
55+
});
56+
57+
describe("Popper hover type", () => {
58+
beforeEach(() => {
59+
defaultProps = {
60+
...defaultProps,
61+
popperType: "hover"
62+
};
63+
});
64+
65+
it("Renders closed by default", () => {
66+
let wrapper = shallow(<Popover {...defaultProps} />);
67+
68+
let popperHover = wrapper.find(PopperHover);
69+
expect(popperHover).toHaveLength(1);
70+
expect(popperHover.hasClass("visible")).toBe(false);
71+
});
72+
73+
it("Renders open when being hovered", () => {
74+
let wrapper = shallow(<Popover {...defaultProps} />);
75+
76+
let popperHover = wrapper.find(PopperHover);
77+
popperHover.props().onHoverChange(true);
78+
79+
popperHover = wrapper.find(PopperHover);
80+
expect(popperHover).toHaveLength(1);
81+
expect(popperHover.hasClass("visible")).toBe(true);
82+
});
83+
});
84+
85+
describe("Popper none type", () => {
86+
beforeEach(() => {
87+
defaultProps = {
88+
...defaultProps,
89+
popperType: "none"
90+
};
91+
});
92+
93+
it("Renders closed by default", () => {
94+
let wrapper = shallow(<Popover {...defaultProps} />);
95+
96+
let popperHover = wrapper.find(PopperHover);
97+
expect(popperHover).toHaveLength(1);
98+
expect(popperHover.hasClass("visible")).toBe(false);
99+
});
100+
101+
it("Renders closed even if hovered on", () => {
102+
let wrapper = shallow(<Popover {...defaultProps} />);
103+
104+
let popperHover = wrapper.find(PopperHover);
105+
popperHover.props().onHoverChange(true);
106+
107+
popperHover = wrapper.find(PopperHover);
108+
expect(popperHover).toHaveLength(1);
109+
expect(popperHover.hasClass("visible")).toBe(false);
110+
});
111+
});
112+
113+
describe("Popper click type", () => {
114+
beforeEach(() => {
115+
defaultProps = {
116+
...defaultProps,
117+
popperType: "click"
118+
};
119+
});
120+
121+
it("Renders closed by default", () => {
122+
let wrapper = shallow(<Popover {...defaultProps} />);
123+
124+
let popperClick = wrapper.find(PopperClick);
125+
expect(popperClick).toHaveLength(1);
126+
expect(popperClick.hasClass("visible")).toBe(false);
127+
});
128+
129+
it("Renders closed when dismissed", () => {
130+
let wrapper = shallow(<Popover {...defaultProps} />);
131+
132+
// Hover on the target to open the popper
133+
let targetHover = wrapper.find(TargetHover);
134+
targetHover.props().onHoverChange(true);
135+
136+
// Verify the popper is open
137+
let popperClick = wrapper.find(PopperClick);
138+
expect(popperClick).toHaveLength(1);
139+
expect(popperClick.hasClass("visible")).toBe(true);
140+
141+
// Now close and verify the popper
142+
popperClick.props().onDismiss({} as any);
143+
popperClick = wrapper.find(PopperClick);
144+
expect(popperClick).toHaveLength(1);
145+
expect(popperClick.hasClass("visible")).toBe(false);
146+
});
147+
});
148+
149+
describe("Popper blur type", () => {
150+
beforeEach(() => {
151+
defaultProps = {
152+
...defaultProps,
153+
popperType: "blur"
154+
};
155+
});
156+
157+
it("Renders closed by default", () => {
158+
let wrapper = shallow(<Popover {...defaultProps} />);
159+
160+
let popper = wrapper.find(PopperBlur);
161+
expect(popper).toHaveLength(1);
162+
expect(popper.hasClass("visible")).toBe(false);
163+
});
164+
165+
it("Renders closed when dismissed", () => {
166+
let wrapper = shallow(<Popover {...defaultProps} />);
167+
168+
// Hover on the target to open the popper
169+
let targetHover = wrapper.find(TargetHover);
170+
targetHover.props().onHoverChange(true);
171+
172+
// Verify the popper is open
173+
let popper = wrapper.find(PopperBlur);
174+
expect(popper).toHaveLength(1);
175+
expect(popper.hasClass("visible")).toBe(true);
176+
177+
// Now close and verify the popper
178+
popper.props().onDismiss({} as any);
179+
popper = wrapper.find(PopperBlur);
180+
expect(popper).toHaveLength(1);
181+
expect(popper.hasClass("visible")).toBe(false);
182+
});
183+
});
184+
185+
describe("Target hover type", () => {
186+
beforeEach(() => {
187+
defaultProps = {
188+
...defaultProps,
189+
popperType: "hover",
190+
targetType: "hover"
191+
};
192+
});
193+
194+
it("Renders closed by default", () => {
195+
let wrapper = shallow(<Popover {...defaultProps} />);
196+
197+
let popper = wrapper.find(PopperHover);
198+
expect(popper).toHaveLength(1);
199+
expect(popper.hasClass("visible")).toBe(false);
200+
});
201+
202+
it("Renders open/closed when clicked", () => {
203+
let wrapper = shallow(<Popover {...defaultProps} />);
204+
205+
// Click the target and open it
206+
let targetHover = wrapper.find(TargetHover);
207+
targetHover.props().onHoverChange(true);
208+
209+
// Verify the popper is open
210+
let popper = wrapper.find(PopperHover);
211+
expect(popper).toHaveLength(1);
212+
expect(popper.hasClass("visible")).toBe(true);
213+
214+
// Now click the target again to close it
215+
targetHover = wrapper.find(TargetHover);
216+
targetHover.props().onHoverChange(false);
217+
popper = wrapper.find(PopperHover);
218+
expect(popper).toHaveLength(1);
219+
expect(popper.hasClass("visible")).toBe(false);
220+
});
221+
});
222+
223+
describe("Target click type", () => {
224+
beforeEach(() => {
225+
defaultProps = {
226+
...defaultProps,
227+
popperType: "hover",
228+
targetType: "click"
229+
};
230+
});
231+
232+
it("Renders closed by default", () => {
233+
let wrapper = shallow(<Popover {...defaultProps} />);
234+
235+
let popper = wrapper.find(PopperHover);
236+
expect(popper).toHaveLength(1);
237+
expect(popper.hasClass("visible")).toBe(false);
238+
});
239+
240+
it("Renders open/closed when clicked", () => {
241+
let wrapper = shallow(<Popover {...defaultProps} />);
242+
243+
// Click the target and open it
244+
let targetClick = wrapper.find(TargetClick);
245+
targetClick.props().onClick({} as any);
246+
247+
// Verify the popper is open
248+
let popper = wrapper.find(PopperHover);
249+
expect(popper).toHaveLength(1);
250+
expect(popper.hasClass("visible")).toBe(true);
251+
252+
// Now click the target again to close it
253+
targetClick = wrapper.find(TargetClick);
254+
targetClick.props().onClick({} as any);
255+
popper = wrapper.find(PopperHover);
256+
expect(popper).toHaveLength(1);
257+
expect(popper.hasClass("visible")).toBe(false);
258+
});
259+
});
260+
261+
describe("Uncontrolled component methods", () => {
262+
it("Opens on request", () => {
263+
let wrapper = shallow(<Popover {...defaultProps} />);
264+
265+
let popperHover = wrapper.find(PopperHover);
266+
expect(popperHover).toHaveLength(1);
267+
expect(popperHover.hasClass("visible")).toBe(false);
268+
269+
(wrapper.instance() as Popover).open();
270+
271+
popperHover = wrapper.find(PopperHover);
272+
expect(popperHover).toHaveLength(1);
273+
expect(popperHover.hasClass("visible")).toBe(true);
274+
});
275+
276+
it("Closes on request", () => {
277+
let wrapper = shallow(<Popover {...defaultProps} />);
278+
279+
let popperHover = wrapper.find(PopperHover);
280+
expect(popperHover).toHaveLength(1);
281+
expect(popperHover.hasClass("visible")).toBe(false);
282+
283+
popperHover.props().onHoverChange(true);
284+
285+
popperHover = wrapper.find(PopperHover);
286+
expect(popperHover).toHaveLength(1);
287+
expect(popperHover.hasClass("visible")).toBe(true);
288+
289+
(wrapper.instance() as Popover).close();
290+
291+
popperHover = wrapper.find(PopperHover);
292+
expect(popperHover).toHaveLength(1);
293+
expect(popperHover.hasClass("visible")).toBe(false);
294+
});
295+
});
296+
});

src/popper.blur.test.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import * as React from "react";
2+
3+
import { PopperBlur, PopperBlurProps } from "./popper.blur";
4+
5+
import { configure, shallow } from "enzyme";
6+
7+
// Configure enzyme
8+
import Adapter = require("enzyme-adapter-react-16");
9+
configure({ adapter: new Adapter() });
10+
11+
describe("Popper.Blur", () => {
12+
let defaultProps: PopperBlurProps;
13+
let spy: jest.Mock<any>;
14+
15+
beforeEach(() => {
16+
spy = jest.fn();
17+
defaultProps = {
18+
onDismiss: () => {}
19+
};
20+
});
21+
22+
it("Renders", () => {
23+
// Render and find the popper content
24+
let wrapper = shallow(<PopperBlur {...defaultProps} />);
25+
});
26+
});

0 commit comments

Comments
 (0)