import * as React from "react"; import { render, screen } from "@testing-library/react"; import { stub } from "sinon"; import { LaneData } from "../../../src/interfaces"; import Lane from "../../../src/components/Lane"; // Mock the Link component from React Router, so we can verify that it gets rendered with the // expected props. This serves as an example of how to do something analogous to Enzyme's shallow // rendering, when we don't want/need to render the whole component tree down to HTML elements to // test something. This technique is useful for testing components in isolation (unit testing), // instead of the integration testing that RTL focuses on. jest.mock("react-router", () => ({ ...jest.requireActual("react-router"), Link: (props) => (
{props.children}
), })); const renderLanes = stub(); const toggleLaneVisibility = stub(); function createLaneData(displayName: string, isAutomated: boolean): LaneData { return { id: 1, display_name: displayName, visible: true, count: 5, sublanes: [], // The absence/presence of custom list ids determines if a lane is automated or custom. custom_list_ids: isAutomated ? [] : [1], inherit_parent_restrictions: true, }; } describe("Lane", () => { it("renders an edit link on a custom lane", () => { const laneData = createLaneData("Custom Lane", false); render( ); const editLink = screen.getAllByTestId("Link")[0]; expect(editLink).toHaveAttribute("data-to", expect.stringMatching(/edit/i)); expect(editLink).toHaveTextContent(/edit/i); }); it("renders an edit link on an automated lane", async () => { const laneData = createLaneData("Automated Lane", true); render( ); const editLink = screen.getAllByTestId("Link")[0]; expect(editLink).toHaveAttribute("data-to", expect.stringMatching(/edit/i)); expect(editLink).toHaveTextContent(/edit/i); }); });