monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
209 lines (170 loc) • 6.17 kB
JavaScript
import React from "react";
import renderer from "react-test-renderer";
import Dropdown from "../Dropdown";
import DropdownDriver from "./driver";
import { person1 } from "../../Avatar/__stories__/assets";
import { Email } from "../../Icon/Icons";
const mockOptions = [
{ value: "ocean", label: "Ocean", isFixed: true },
{ value: "blue", label: "Blue", isDisabled: true },
{ value: "purple", label: "Purple" },
{ value: "red", label: "Red", isFixed: true },
{ value: "orange", label: "Orange" },
{ value: "yellow", label: "Yellow" }
];
describe("Dropdown renders correctly", () => {
it("with empty props", () => {
const tree = renderer.create(<Dropdown />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with className", () => {
const tree = renderer.create(<Dropdown className="test" />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with placeholder", () => {
const tree = renderer.create(<Dropdown placeholder="text" />).toJSON();
expect(tree).toMatchSnapshot();
});
it("when disabled", () => {
const tree = renderer.create(<Dropdown disabled />).toJSON();
expect(tree).toMatchSnapshot();
});
it("when readOnly", () => {
const tree = renderer.create(<Dropdown readOnly />).toJSON();
expect(tree).toMatchSnapshot();
});
it("without clear button", () => {
const tree = renderer.create(<Dropdown clearable={false} />).toJSON();
expect(tree).toMatchSnapshot();
});
it("when rtl", () => {
const tree = renderer.create(<Dropdown rtl />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with options", () => {
const tree = renderer.create(<Dropdown options={mockOptions} />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with id", () => {
const tree = renderer.create(<Dropdown placeholidder="test" />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with autoFocus", () => {
const tree = renderer.create(<Dropdown autoFocus />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with multi", () => {
const tree = renderer.create(<Dropdown multi />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with multi and disabled", () => {
const tree = renderer
.create(<Dropdown multi disabled options={mockOptions} defaultValue={[mockOptions[0], mockOptions[1]]} />)
.toJSON();
expect(tree).toMatchSnapshot();
});
it("with multi and readonly", () => {
const tree = renderer
.create(<Dropdown multi readOnly options={mockOptions} defaultValue={[mockOptions[0], mockOptions[1]]} />)
.toJSON();
expect(tree).toMatchSnapshot();
});
it("with multiline", () => {
const tree = renderer.create(<Dropdown multiline />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with leftAvatar", () => {
const options = [
{
value: "ocean",
label: "Ocean",
leftAvatar: person1
}
];
const tree = renderer.create(<Dropdown options={options} defaultValue={[options[0]]} multi multiline />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with chip colors", () => {
const options = [
{
value: "primary",
label: "Primary",
chipColor: Dropdown.chipColors.PRIMARY
},
{
value: "positive",
label: "Positive",
chipColor: Dropdown.chipColors.POSITIVE
},
{
value: "negative",
label: "Negative",
chipColor: Dropdown.chipColors.NEGATIVE
}
];
const tree = renderer.create(<Dropdown options={options} defaultValue={options} multi multiline />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with leftIcon", () => {
const options = [
{
value: "ocean",
label: "Ocean",
leftIcon: Email
}
];
const tree = renderer.create(<Dropdown options={options} defaultValue={[options[0]]} multi multiline />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with tabIndex", () => {
// eslint-disable-next-line jsx-a11y/tabindex-no-positive
const tree = renderer.create(<Dropdown tabIndex={9999} />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with value", () => {
const tree = renderer.create(<Dropdown value={mockOptions[0]} />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with defaultValue", () => {
const tree = renderer.create(<Dropdown defaultValue={mockOptions[0]} />).toJSON();
expect(tree).toMatchSnapshot();
});
it("with tooltipContent", () => {
const tree = renderer.create(<Dropdown tooltipContent="tooltip content" />).toJSON();
expect(tree).toMatchSnapshot();
});
describe("snapshot driver", () => {
it("should render correctly with empty props", () => {
const component = new DropdownDriver();
expect(component.snapshot).toMatchSnapshot();
});
it("should render correctly for the different sizes", () => {
Object.values(Dropdown.size).forEach(size => {
const component = new DropdownDriver().withSize(size).withPlaceholder();
expect(component.snapshot).toMatchSnapshot();
});
});
it("should use virtualization if set", async () => {
const component = new DropdownDriver().withOpenMenuOnClick().withOpenMenuOnFocus().withVirtualizedOptions();
// Wait for useEffect to finish
await component.renderWithEffects();
component.focusInput();
expect(component.snapshot).toMatchSnapshot();
});
it("should use async if set", () => {
const component = new DropdownDriver().withAsyncOptions().withDefaultOptions();
component.focusInput();
expect(component.snapshot).toMatchSnapshot();
});
it("should open menu on focus if set", () => {
const component = new DropdownDriver().withOpenMenuOnClick().withOptions();
component.focusInput();
expect(component.snapshot).toMatchSnapshot();
});
it("should open menu on click if set", () => {
const component = new DropdownDriver().withOpenMenuOnClick().withOptions();
component.clickInput();
expect(component.snapshot).toMatchSnapshot();
});
});
});