import { render, screen } from "@testing-library/react"; import NetworkManagement from "components/NetworkManagement"; import { MemoryRouter, Route, Router } from "react-router-dom"; import { createMemoryHistory } from "history"; import userEvent from "@testing-library/user-event"; import API from "utils/API"; import MockAdapter from "axios-mock-adapter"; describe("NetworkManagement", () => { it("renders unchanged", () => { const history = createMemoryHistory(); const { container } = render( ); expect(container).toMatchSnapshot(); }); test("renders with initial state (accordion not expanded)", () => { const history = createMemoryHistory(); render( ); const expandAccordionButton = screen.getByRole("button", { name: "Management", }); expect(expandAccordionButton).toBeInTheDocument(); expect( screen.queryByRole("button", { name: "Delete Network" }) ).toBeFalsy(); }); test("renders with accordion expanded (and dialog closed)", async () => { const history = createMemoryHistory(); const user = userEvent.setup(); render( ); const expandAccordionButton = screen.getByRole("button", { name: "Management", }); await user.click(expandAccordionButton); expect( screen.getByRole("button", { name: "Delete Network", }) ).toBeVisible(); }); test("renders with accordion expanded and dialog opened", async () => { const history = createMemoryHistory(); const user = userEvent.setup(); render( ); const expandAccordionButton = screen.getByRole("button", { name: "Management", }); await user.click(expandAccordionButton); const deleteNetworkButton = screen.getByRole("button", { name: "Delete Network", }); await user.click(deleteNetworkButton); expect(screen.getByRole("button", { name: "Cancel" })).toBeVisible(); expect(screen.getByRole("button", { name: "Delete" })).toBeVisible(); }); test("renders with accordion closed after opening and closing it", async () => { const history = createMemoryHistory(); const user = userEvent.setup(); render( ); const expandAccordionButton = screen.getByRole("button", { name: "Management", }); await user.click(expandAccordionButton); expect( screen.getByRole("button", { name: "Delete Network", }) ).toBeVisible(); await user.click(expandAccordionButton); expect( screen.queryByRole("button", { name: "Delete Network", }) ).toBeFalsy(); }); test("renders with accordion expanded and dialog closed (after opening and closing the dialog)", async () => { const history = createMemoryHistory(); const user = userEvent.setup(); render( ); const expandAccordionButton = screen.getByRole("button", { name: "Management", }); await user.click(expandAccordionButton); const deleteNetworkButton = screen.getByRole("button", { name: "Delete Network", }); await user.click(deleteNetworkButton); const dialogCancelButton = screen.getByRole("button", { name: "Cancel" }); const dialogDeleteButton = screen.getByRole("button", { name: "Delete" }); expect(dialogCancelButton).toBeVisible(); expect(dialogDeleteButton).toBeVisible(); await user.click(dialogCancelButton); expect(dialogCancelButton).not.toBeVisible(); expect(dialogDeleteButton).not.toBeVisible(); }); test("renders with network deleted (after expanding the acordion, opening the dialog and clicking the button to delete the network)", async () => { const mock = new MockAdapter(API); const user = userEvent.setup(); const nwid = "123"; let testLocation; mock.onDelete("/network/" + nwid).reply(200); render( { testLocation = location; return null; }} /> ); const expandAccordionButton = screen.getByRole("button", { name: "Management", }); await user.click(expandAccordionButton); const deleteNetworkButton = screen.getByRole("button", { name: "Delete Network", }); await user.click(deleteNetworkButton); const dialogCancelButton = screen.getByRole("button", { name: "Cancel" }); const dialogDeleteButton = screen.getByRole("button", { name: "Delete" }); expect(dialogCancelButton).toBeVisible(); expect(dialogDeleteButton).toBeVisible(); await user.click(dialogDeleteButton); expect(testLocation.pathname).toBe("/"); }); });