2020-10-16 13:16:01 +00:00
|
|
|
import React from "react";
|
|
|
|
import { mount, shallow } from "enzyme";
|
|
|
|
import LinkWithDropdown from ".";
|
2019-09-08 14:30:16 +00:00
|
|
|
|
2019-10-21 08:38:03 +00:00
|
|
|
const data = [
|
|
|
|
{
|
2020-10-16 13:16:01 +00:00
|
|
|
key: "key1",
|
|
|
|
label: "Button 1",
|
|
|
|
onClick: () => console.log("Button1 action"),
|
2019-10-21 08:38:03 +00:00
|
|
|
},
|
|
|
|
{
|
2020-10-16 13:16:01 +00:00
|
|
|
key: "key2",
|
|
|
|
label: "Button 2",
|
|
|
|
onClick: () => console.log("Button2 action"),
|
2019-10-21 08:38:03 +00:00
|
|
|
},
|
|
|
|
{
|
2020-10-16 13:16:01 +00:00
|
|
|
key: "key3",
|
|
|
|
isSeparator: true,
|
2019-10-21 08:38:03 +00:00
|
|
|
},
|
|
|
|
{
|
2020-10-16 13:16:01 +00:00
|
|
|
key: "key4",
|
|
|
|
label: "Button 3",
|
|
|
|
onClick: () => console.log("Button3 action"),
|
2019-10-21 08:38:03 +00:00
|
|
|
},
|
|
|
|
];
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
describe("<LinkWithDropdown />", () => {
|
|
|
|
it("renders without error", () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<LinkWithDropdown color="#333333" isBold={true} data={[]}>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
|
|
|
);
|
2019-09-08 14:30:16 +00:00
|
|
|
|
|
|
|
expect(wrapper).toExist();
|
|
|
|
});
|
2019-10-21 08:38:03 +00:00
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("re-render test", () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<LinkWithDropdown color="#333333" isBold={true} data={data}>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
|
|
|
|
const instance = wrapper.instance();
|
2020-10-16 13:16:01 +00:00
|
|
|
const shouldUpdate = instance.shouldComponentUpdate(
|
|
|
|
{
|
|
|
|
isBold: false,
|
|
|
|
},
|
|
|
|
wrapper.state
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
|
|
|
|
expect(shouldUpdate).toBe(true);
|
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("re-render after changing color", () => {
|
|
|
|
const wrapper = shallow(
|
|
|
|
<LinkWithDropdown color="#333333" isBold={true} data={data}>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
const shouldUpdate = instance.shouldComponentUpdate(
|
|
|
|
{
|
|
|
|
color: "#999",
|
|
|
|
},
|
|
|
|
instance.state
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
|
|
|
|
expect(shouldUpdate).toBe(true);
|
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("re-render after changing dropdownType and isOpen prop", () => {
|
|
|
|
const wrapper = shallow(
|
|
|
|
<LinkWithDropdown color="#333333" isBold={true} data={data}>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
const shouldUpdate = instance.shouldComponentUpdate(
|
|
|
|
{
|
|
|
|
isOpen: true,
|
|
|
|
dropdownType: "appearDashedAfterHover",
|
|
|
|
},
|
|
|
|
instance.state
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
|
|
|
|
expect(shouldUpdate).toBe(true);
|
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("re-render after changing isOpen prop", () => {
|
|
|
|
const wrapper = shallow(
|
|
|
|
<LinkWithDropdown color="#333333" isBold={true} data={data}>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
const shouldUpdate = instance.shouldComponentUpdate(
|
|
|
|
{
|
|
|
|
isOpen: true,
|
|
|
|
},
|
|
|
|
instance.state
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
|
|
|
|
expect(shouldUpdate).toBe(true);
|
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("not re-render", () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<LinkWithDropdown color="#333333" isBold={true} data={data}>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
|
|
|
|
const instance = wrapper.instance();
|
2020-10-16 13:16:01 +00:00
|
|
|
const shouldUpdate = instance.shouldComponentUpdate(
|
|
|
|
instance.props,
|
|
|
|
instance.state
|
|
|
|
);
|
2019-10-21 08:38:03 +00:00
|
|
|
|
|
|
|
expect(shouldUpdate).toBe(false);
|
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("accepts id", () => {
|
2019-12-03 11:31:25 +00:00
|
|
|
const wrapper = mount(
|
2020-10-16 13:16:01 +00:00
|
|
|
<LinkWithDropdown color="#333333" isBold={true} data={[]} id="testId">
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
2019-12-03 11:31:25 +00:00
|
|
|
);
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
expect(wrapper.prop("id")).toEqual("testId");
|
2019-12-03 11:31:25 +00:00
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("accepts className", () => {
|
2019-12-03 11:31:25 +00:00
|
|
|
const wrapper = mount(
|
2020-10-16 13:16:01 +00:00
|
|
|
<LinkWithDropdown
|
|
|
|
color="#333333"
|
|
|
|
isBold={true}
|
|
|
|
data={[]}
|
|
|
|
className="test"
|
|
|
|
>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
2019-12-03 11:31:25 +00:00
|
|
|
);
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
expect(wrapper.prop("className")).toEqual("test");
|
2019-12-03 11:31:25 +00:00
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("accepts style", () => {
|
2019-12-03 11:31:25 +00:00
|
|
|
const wrapper = mount(
|
2020-10-16 13:16:01 +00:00
|
|
|
<LinkWithDropdown
|
|
|
|
color="#333333"
|
|
|
|
isBold={true}
|
|
|
|
data={[]}
|
|
|
|
style={{ color: "red" }}
|
|
|
|
>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
2019-12-03 11:31:25 +00:00
|
|
|
);
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
expect(wrapper.getDOMNode().style).toHaveProperty("color", "red");
|
2019-12-03 11:31:25 +00:00
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("componentDidUpdate() state lifecycle test", () => {
|
|
|
|
const wrapper = shallow(
|
|
|
|
<LinkWithDropdown
|
|
|
|
color="#333333"
|
|
|
|
isBold={true}
|
|
|
|
data={[]}
|
|
|
|
style={{ color: "red" }}
|
|
|
|
>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
|
|
|
);
|
2019-12-03 11:31:25 +00:00
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
|
|
|
wrapper.setState({ isOpen: false });
|
|
|
|
|
|
|
|
instance.componentDidUpdate(wrapper.props(), wrapper.state());
|
|
|
|
|
|
|
|
wrapper.setState({ isOpen: true });
|
|
|
|
|
|
|
|
instance.componentDidUpdate(wrapper.props(), wrapper.state());
|
|
|
|
|
|
|
|
expect(wrapper.state()).toBe(wrapper.state());
|
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("componentDidUpdate() prop lifecycle test", () => {
|
|
|
|
const wrapper = shallow(
|
|
|
|
<LinkWithDropdown
|
|
|
|
color="#333333"
|
|
|
|
isBold={true}
|
|
|
|
data={[]}
|
|
|
|
style={{ color: "red" }}
|
|
|
|
>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
|
|
|
);
|
2019-12-03 11:31:25 +00:00
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
instance.componentDidUpdate(
|
|
|
|
{ isOpen: true, dropdownType: "appearDashedAfterHover" },
|
|
|
|
wrapper.state()
|
|
|
|
);
|
2019-12-03 11:31:25 +00:00
|
|
|
|
|
|
|
expect(wrapper.state()).toBe(wrapper.state());
|
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("accepts prop dropdownType", () => {
|
2019-12-03 11:31:25 +00:00
|
|
|
const wrapper = mount(
|
2020-10-16 13:16:01 +00:00
|
|
|
<LinkWithDropdown
|
|
|
|
color="#333333"
|
|
|
|
isBold={true}
|
|
|
|
data={[]}
|
|
|
|
dropdownType="appearDashedAfterHover"
|
|
|
|
>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
2019-12-03 11:31:25 +00:00
|
|
|
);
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
expect(wrapper.prop("dropdownType")).toEqual("appearDashedAfterHover");
|
2019-12-03 11:31:25 +00:00
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("accepts prop isOpen", () => {
|
2019-12-03 11:31:25 +00:00
|
|
|
const wrapper = mount(
|
2020-10-16 13:16:01 +00:00
|
|
|
<LinkWithDropdown color="#333333" isBold={true} data={[]} isOpen>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
2019-12-03 11:31:25 +00:00
|
|
|
);
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
expect(wrapper.prop("isOpen")).toEqual(true);
|
2019-12-03 11:31:25 +00:00
|
|
|
});
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
it("accepts prop isSemitransparent", () => {
|
2019-12-03 11:31:25 +00:00
|
|
|
const wrapper = mount(
|
2020-10-16 13:16:01 +00:00
|
|
|
<LinkWithDropdown
|
|
|
|
color="#333333"
|
|
|
|
isBold={true}
|
|
|
|
data={[]}
|
|
|
|
isSemitransparent
|
|
|
|
>
|
|
|
|
Link with dropdown
|
|
|
|
</LinkWithDropdown>
|
2019-12-03 11:31:25 +00:00
|
|
|
);
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
expect(wrapper.prop("isSemitransparent")).toEqual(true);
|
2019-12-03 11:31:25 +00:00
|
|
|
});
|
2019-09-08 14:30:16 +00:00
|
|
|
});
|