// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: AGPL-3.0

import * as React from "react";
import { mount, configure } from "enzyme";
import * as Adapter from "enzyme-adapter-react-16";

import { Popover, DefaultTrigger } from "./popover";
import Button, { ButtonProps } from "@material-ui/core/Button";

configure({ adapter: new Adapter() });

describe("<Popover />", () => {
    it("opens on default trigger click", () => {
        const popover = mount(<Popover />);
        popover.find(DefaultTrigger).simulate("click");
        expect((popover.state() as any).anchorEl).toBeDefined();
    });

    it("renders custom trigger", () => {
        const popover = mount(<Popover triggerComponent={CustomTrigger} />);
        expect(popover.find(Button).text()).toBe("Open popover");
    });

    it("opens on custom trigger click", () => {
        const popover = mount(<Popover triggerComponent={CustomTrigger} />);
        popover.find(CustomTrigger).simulate("click");
        expect((popover.state() as any).anchorEl).toBeDefined();
    });

    it("renders children when opened", () => {
        const popover = mount(
            <Popover>
                <CustomTrigger />
            </Popover>
        );
        popover.find(DefaultTrigger).simulate("click");
        expect(popover.find(CustomTrigger)).toHaveLength(1);
    });

    it("does not close if closeOnContentClick is not set", () => {
        const popover = mount(
            <Popover>
                <CustomTrigger />
            </Popover>
        );
        popover.find(DefaultTrigger).simulate("click");
        popover.find(CustomTrigger).simulate("click");
        expect((popover.state() as any).anchorEl).toBeDefined();
    });
    it("closes on content click if closeOnContentClick is set", () => {
        const popover = mount(
            <Popover closeOnContentClick>
                <CustomTrigger />
            </Popover>
        );
        popover.find(DefaultTrigger).simulate("click");
        popover.find(CustomTrigger).simulate("click");
        expect((popover.state() as any).anchorEl).toBeUndefined();
    });

});

const CustomTrigger: React.SFC<ButtonProps> = (props) => (
    <Button {...props}>
        Open popover
    </Button>
);