import React from "react";
import { mount } from "enzyme";
import { hostStub } from "test/stubs";
import hostActions from "redux/nodes/entities/hosts/actions";
import { HostDetailsPage } from "./HostDetailsPage";
const offlineHost = { ...hostStub, id: 111, status: "offline" };
const onlineHost = { ...hostStub, id: 111, status: "online" };
describe("HostDetailsPage - component", () => {
afterEach(() => {
jest.clearAllMocks();
});
const propsWithOnlineHost = {
host: onlineHost,
hostID: onlineHost.id.toString(),
queries: {},
};
const propsWithOfflineHost = {
host: offlineHost,
hostID: offlineHost.id.toString(),
};
describe("Loading host data", () => {
it("Loads host data", () => {
const dispatch = () => Promise.resolve();
const props = { ...propsWithOnlineHost, dispatch };
const spy = jest
.spyOn(hostActions, "load")
.mockImplementation(() => () => Promise.resolve([]));
mount();
expect(spy).toHaveBeenCalled();
});
});
describe("Delete a host", () => {
it("Deletes an offine host after confirmation modal", () => {
const dispatch = () => Promise.resolve();
const props = { ...propsWithOfflineHost, dispatch };
const page = mount();
const deleteBtn = page.find("Button").at(2);
expect(deleteBtn.text()).toContain("Delete");
jest.spyOn(hostActions, "destroy").mockImplementation(() => () => {
dispatch({ type: "hosts_LOAD_REQUEST" });
return Promise.resolve();
});
expect(page.find("Modal").length).toEqual(0);
deleteBtn.simulate("click");
const confirmModal = page.find("Modal");
expect(confirmModal.length).toEqual(1);
const confirmBtn = confirmModal.find(".button--alert");
confirmBtn.simulate("click");
expect(hostActions.destroy).toHaveBeenCalledWith(offlineHost);
});
it("Deletes an online host after confirmation modal", () => {
const dispatch = () => Promise.resolve();
const props = { ...propsWithOnlineHost, dispatch };
const page = mount();
const deleteBtn = page.find("Button").at(2);
expect(deleteBtn.text()).toContain("Delete");
jest.spyOn(hostActions, "destroy").mockImplementation(() => () => {
dispatch({ type: "hosts_LOAD_REQUEST" });
return Promise.resolve();
});
expect(page.find("Modal").length).toEqual(0);
deleteBtn.simulate("click");
const confirmModal = page.find("Modal");
expect(confirmModal.length).toEqual(1);
const confirmBtn = confirmModal.find(".button--alert");
confirmBtn.simulate("click");
expect(hostActions.destroy).toHaveBeenCalledWith(onlineHost);
});
});
describe("Query a host", () => {
const dispatch = () => Promise.resolve();
const props = { ...propsWithOnlineHost, dispatch };
const page = mount();
const queryBtn = page.find("Button").at(1);
expect(queryBtn.text()).toContain("Query");
expect(page.find("Modal").length).toEqual(0);
queryBtn.simulate("click");
const confirmModal = page.find("Modal");
console.log("confirmModal", confirmModal);
expect(confirmModal.length).toEqual(1);
});
});