import React from "react";
import { createSerializer } from "@emotion/jest";
import { render } from "@testing-library/react";
import {
Sidebar,
SidebarItem,
SidebarItemLabel,
SidebarSection,
SidebarSubMenuItem
} from "../";
import {
SidebarSubMenuComponent,
getSubItemList
} from "../components/SidebarSubMenu";
import { ProductIcons } from "../../icons/dist/product-icons-enum";
expect.addSnapshotSerializer(createSerializer());
describe("Sidebar", () => {
it("renders", () => {
const { asFragment } = render(
Sidebar content
);
expect(asFragment()).toMatchSnapshot();
});
it("calls onOpen callback", () => {
const onOpenFn = jest.fn();
const { rerender } = render(
Sidebar content
);
expect(onOpenFn).not.toHaveBeenCalled();
rerender(
Sidebar content
);
expect(onOpenFn).toHaveBeenCalled();
});
it("calls onClose callback", () => {
const onCloseFn = jest.fn();
const { rerender } = render(
Sidebar content
);
expect(onCloseFn).not.toHaveBeenCalled();
rerender(
Sidebar content
);
expect(onCloseFn).toHaveBeenCalled();
});
describe("SidebarSection", () => {
it("renders", () => {
const { asFragment } = render(
Sidebar section content
);
expect(asFragment()).toMatchSnapshot();
});
});
describe("SidebarItem", () => {
it("renders", () => {
const onClickFn = jest.fn();
const { asFragment } = render(
Item label
);
expect(asFragment()).toMatchSnapshot();
});
});
describe("SidebarItemLabel", () => {
it("renders", () => {
const { asFragment } = render(
Item label
);
expect(asFragment()).toMatchSnapshot();
});
});
describe("SidebarSubMenu", () => {
const onClickFn = jest.fn();
/* eslint-disable react/jsx-wrap-multilines */
const subMenuItems = [
Item label
,
Item label
];
/* eslint-enable react/jsx-wrap-multilines */
const { asFragment } = render(
Item label
}
>
{subMenuItems}
);
it("renders", () => {
expect(asFragment()).toMatchSnapshot();
});
it("makes a list of submenu items", () => {
const subItemResult = getSubItemList(subMenuItems);
expect(subItemResult.props.children.length).toBe(2);
});
});
describe("SidebarSubMenuItem", () => {
it("renders", () => {
const { asFragment } = render(
Item label
);
expect(asFragment()).toMatchSnapshot();
});
});
});