Implement better pattern for hanling actions in context menu
[arvados.git] / src / components / popover / popover.test.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import * as React from "react";
6 import { mount, configure } from "enzyme";
7 import * as Adapter from "enzyme-adapter-react-16";
8
9 import Popover, { DefaultTrigger } from "./popover";
10 import Button, { ButtonProps } from "@material-ui/core/Button";
11
12 configure({ adapter: new Adapter() });
13
14 describe("<Popover />", () => {
15     it("opens on default trigger click", () => {
16         const popover = mount(<Popover />);
17         popover.find(DefaultTrigger).simulate("click");
18         expect(popover.state().anchorEl).toBeDefined();
19     });
20
21     it("renders custom trigger", () => {
22         const popover = mount(<Popover triggerComponent={CustomTrigger} />);
23         expect(popover.find(Button).text()).toBe("Open popover");
24     });
25
26     it("opens on custom trigger click", () => {
27         const popover = mount(<Popover triggerComponent={CustomTrigger} />);
28         popover.find(CustomTrigger).simulate("click");
29         expect(popover.state().anchorEl).toBeDefined();
30     });
31
32     it("renders children when opened", () => {
33         const popover = mount(
34             <Popover>
35                 <CustomTrigger />
36             </Popover>
37         );
38         popover.find(DefaultTrigger).simulate("click");
39         expect(popover.find(CustomTrigger)).toHaveLength(1);
40     });
41     
42     it("does not close if closeOnContentClick is not set", () => {
43         const popover = mount(
44             <Popover>
45                 <CustomTrigger />
46             </Popover>
47         );
48         popover.find(DefaultTrigger).simulate("click");
49         popover.find(CustomTrigger).simulate("click");
50         expect(popover.state().anchorEl).toBeDefined();
51     });
52     it("closes on content click if closeOnContentClick is set", () => {
53         const popover = mount(
54             <Popover closeOnContentClick>
55                 <CustomTrigger />
56             </Popover>
57         );
58         popover.find(DefaultTrigger).simulate("click");
59         popover.find(CustomTrigger).simulate("click");
60         expect(popover.state().anchorEl).toBeUndefined();
61     });
62
63 });
64
65 const CustomTrigger: React.SFC<ButtonProps> = (props) => (
66     <Button {...props}>
67         Open popover
68     </Button>
69 );