import React from "react"; import { mount } from "enzyme"; import { noop } from "lodash"; import { campaignStub } from "test/stubs"; import QueryProgressDetails from "./QueryProgressDetails"; describe("QueryProgressDetails - component", () => { const DEFAULT_CAMPAIGN = { hosts_count: { total: 0, }, }; const defaultProps = { campaign: DEFAULT_CAMPAIGN, onRunQuery: noop, onStopQuery: noop, query: "select * from users", queryIsRunning: false, }; describe("rendering", () => { const DefaultComponent = mount(); it("renders", () => { expect(DefaultComponent.length).toEqual( 1, "QueryProgressDetails did not render" ); }); it("renders a Run Query Button", () => { const RunQueryButton = DefaultComponent.find( ".query-progress-details__run-btn" ); expect(RunQueryButton.length).toBeGreaterThan( 0, "RunQueryButton did not render" ); }); it("does not render a Stop Query Button", () => { const StopQueryButton = DefaultComponent.find( ".query-progress-details__stop-btn" ); expect(StopQueryButton.length).toEqual( 0, "StopQueryButton is not expected to render" ); }); it("does not render a Timer component", () => { const Timer = DefaultComponent.find("Timer"); expect(Timer.length).toEqual(0, "Timer is not expected to render"); }); it("does not render a ProgressBar component", () => { const ProgressBar = DefaultComponent.find("ProgressBar"); expect(ProgressBar.length).toEqual( 0, "ProgressBar is not expected to render" ); }); describe("when the campaign has results", () => { describe("and the query is running", () => { const props = { ...defaultProps, campaign: campaignStub, queryIsRunning: true, }; const Component = mount(); it("renders a Timer component", () => { const Timer = Component.find("Timer"); expect(Timer.length).toEqual(1, "Timer is expected to render"); }); it("renders a Stop Query Button", () => { const StopQueryButton = Component.find( ".query-progress-details__stop-btn" ); expect(StopQueryButton.length).toBeGreaterThan( 0, "StopQueryButton is expected to render" ); }); it("does not render a Run Query Button", () => { const RunQueryButton = Component.find( ".query-progress-details__run-btn" ); expect(RunQueryButton.length).toEqual( 0, "RunQueryButton is not expected render" ); }); it("renders a ProgressBar component", () => { const ProgressBar = Component.find("ProgressBar"); expect(ProgressBar.length).toEqual( 1, "ProgressBar is expected to render" ); }); }); describe("and the query is not running", () => { const props = { ...defaultProps, campaign: campaignStub, queryIsRunning: false, }; const Component = mount(); it("does not render a Timer component", () => { const Timer = Component.find("Timer"); expect(Timer.length).toEqual(0, "Timer is not expected to render"); }); it("does not render a Stop Query Button", () => { const StopQueryButton = Component.find( ".query-progress-details__stop-btn" ); expect(StopQueryButton.length).toEqual( 0, "StopQueryButton is not expected to render" ); }); it("renders a Run Query Button", () => { const RunQueryButton = Component.find( ".query-progress-details__run-btn" ); expect(RunQueryButton.length).toBeGreaterThan( 0, "RunQueryButton did not render" ); }); it("renders a ProgressBar component", () => { const ProgressBar = Component.find("ProgressBar"); expect(ProgressBar.length).toEqual( 1, "ProgressBar is expected to render" ); }); }); }); }); describe("when the campaign is empty", () => { describe("and the query is running", () => { const noResults = { failed: 0, successful: 0, total: 0 }; const campaignWithNoResults = Object.assign({}, campaignStub, { hosts_count: noResults, }); const props = { ...defaultProps, campaign: campaignWithNoResults, queryIsRunning: true, }; const Component = mount(); it("renders a ProgressBar component", () => { const ProgressBar = Component.find("ProgressBar"); expect(ProgressBar.length).toEqual( 1, "ProgressBar is expected to render" ); }); }); }); describe("running a query", () => { it("calls the onRunQuery prop with the query text", () => { const spy = jest.fn(); const props = { ...defaultProps, campaign: campaignStub, onRunQuery: spy, }; const Component = mount(); const RunQueryButton = Component.find(".query-progress-details__run-btn"); RunQueryButton.hostNodes().simulate("click"); expect(spy).toHaveBeenCalled(); }); }); describe("stopping a query", () => { it("calls the onStopQuery prop", () => { const spy = jest.fn(); const props = { ...defaultProps, campaign: campaignStub, onStopQuery: spy, queryIsRunning: true, }; const Component = mount(); const StopQueryButton = Component.find( ".query-progress-details__stop-btn" ); StopQueryButton.hostNodes().simulate("click"); expect(spy).toHaveBeenCalled(); }); }); });