import React from "react"; import Enzyme, { shallow, mount } from "enzyme"; import ServerDashboard from "./ServerDashboard.pre"; import Adapter from "@wojtekmaj/enzyme-adapter-react-17"; import { HashRouter, Switch } from "react-router-dom"; Enzyme.configure({ adapter: new Adapter() }); describe("ServerDashboard Component: ", () => { var serverDashboardJsx = (callbackSpy) => ( ); var deepServerDashboardJsx = (callbackSpy) => ( ); var mockAsync = () => jest .fn() .mockImplementation(() => Promise.resolve({ json: () => Promise.resolve({ k: "v" }) }) ); it("Renders users from props.user_data into table", () => { let component = shallow(serverDashboardJsx(jest.fn())), userRows = component.find(".user-row"); expect(userRows.length).toBe(2); }); it("Renders correctly the status of a single-user server", () => { let component = shallow(serverDashboardJsx(jest.fn())), userRows = component.find(".user-row"); // Renders .stop-button when server is started // Should be 1 since user foo is started expect(userRows.at(0).find(".stop-button").length).toBe(1); // Renders .start-button when server is stopped // Should be 1 since user bar is stopped expect(userRows.at(1).find(".start-button").length).toBe(1); }); it("Invokes the startServer event on button click", () => { let callbackSpy = mockAsync(), component = shallow(serverDashboardJsx(callbackSpy)), startBtn = component.find(".start-button"); startBtn.simulate("click"); expect(callbackSpy).toHaveBeenCalled(); }); it("Invokes the stopServer event on button click", () => { let callbackSpy = mockAsync(), component = shallow(serverDashboardJsx(callbackSpy)), stopBtn = component.find(".stop-button"); stopBtn.simulate("click"); expect(callbackSpy).toHaveBeenCalled(); }); it("Invokes the shutdownHub event on button click", () => { let callbackSpy = mockAsync(), component = shallow(serverDashboardJsx(callbackSpy)), shutdownBtn = component.find(".shutdown-button"); shutdownBtn.simulate("click"); expect(callbackSpy).toHaveBeenCalled(); }); it("Sorts according to username", () => { let component = mount(deepServerDashboardJsx(jest.fn())).find( "ServerDashboard" ), handler = component.find("SortHandler").first(); handler.simulate("click"); let first = component.find(".user-row").first(); expect(first.html().includes("bar")).toBe(true); handler.simulate("click"); first = component.find(".user-row").first(); expect(first.html().includes("foo")).toBe(true); }); it("Sorts according to admin", () => { let component = mount(deepServerDashboardJsx(jest.fn())).find( "ServerDashboard" ), handler = component.find("SortHandler").at(1); handler.simulate("click"); let first = component.find(".user-row").first(); expect(first.html().includes("admin")).toBe(true); handler.simulate("click"); first = component.find(".user-row").first(); expect(first.html().includes("admin")).toBe(false); }); it("Sorts according to last activity", () => { let component = mount(deepServerDashboardJsx(jest.fn())).find( "ServerDashboard" ), handler = component.find("SortHandler").at(2); handler.simulate("click"); let first = component.find(".user-row").first(); // foo used most recently expect(first.html().includes("foo")).toBe(true); handler.simulate("click"); first = component.find(".user-row").first(); // invert sort - bar used least recently expect(first.html().includes("bar")).toBe(true); }); it("Sorts according to server status (running/not running)", () => { let component = mount(deepServerDashboardJsx(jest.fn())).find( "ServerDashboard" ), handler = component.find("SortHandler").at(3); handler.simulate("click"); let first = component.find(".user-row").first(); // foo running expect(first.html().includes("foo")).toBe(true); handler.simulate("click"); first = component.find(".user-row").first(); // invert sort - bar not running expect(first.html().includes("bar")).toBe(true); }); it("Renders nothing if required data is not available", () => { let component = shallow(); expect(component.html()).toBe("
"); }); });