From 33391192adecdf86da3547f024ff82fb0cf85535 Mon Sep 17 00:00:00 2001 From: brunomilitzer Date: Wed, 3 Nov 2021 11:30:46 +0000 Subject: UPDATED Jest Unit Tests for Monitoring Functionality Updated Unit Tests to cover monitoring functionality Issue-ID: POLICY-3561 Change-Id: I8434cf5d60463d60175ef6e48f0e75e8c4f656da Signed-off-by: brunomilitzer --- .../dialogs/ControlLoop/AccordionHeader.js | 22 ++- .../dialogs/ControlLoop/AccordionHeader.test.js | 18 +- .../dialogs/ControlLoop/ChangeOrderStateModal.js | 2 +- .../ControlLoop/MonitorInstantiation.test.js | 53 +++++- .../__snapshots__/AccordionHeader.test.js.snap | 210 ++++++++++++++++++++- .../MonitorInstantiation.test.js.snap | 2 +- .../testFiles/monitoringControlLoopList.json | 74 ++++++++ 7 files changed, 358 insertions(+), 23 deletions(-) create mode 100644 gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/monitoringControlLoopList.json (limited to 'gui-clamp/ui-react') diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/AccordionHeader.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/AccordionHeader.js index 2997239..a34b5b3 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/AccordionHeader.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/AccordionHeader.js @@ -19,9 +19,9 @@ * */ +import React from "react"; import styled from "styled-components"; import { Accordion, Button } from "react-bootstrap"; -import React, { useEffect, useState } from "react"; const UninitialisedHeader = styled.div` margin: 0; @@ -62,6 +62,12 @@ const ToggleButton = styled(Button)` const AccordionHeader = (props) => { + const index = props.index; + + console.log("----------------"); + console.log(index); + console.log("----------------"); + const toggleState = () => { switch (props.orderedState) { case 'UNINITIALISED': @@ -70,6 +76,8 @@ const AccordionHeader = (props) => { return renderPassiveOrderedState(); case 'RUNNING': return renderRunningOrderedState(); + default: + return renderUninitialisedOrderedState(); } } @@ -77,7 +85,7 @@ const AccordionHeader = (props) => { return ( - + { props.title } @@ -85,11 +93,9 @@ const AccordionHeader = (props) => { } const renderPassiveOrderedState = () => { - console.log("renderPassiveOrderedState called"); - return ( - + { props.title } @@ -97,11 +103,9 @@ const AccordionHeader = (props) => { } const renderRunningOrderedState = () => { - console.log("renderRunningOrderedState called"); - return ( - + { props.title } @@ -109,7 +113,7 @@ const AccordionHeader = (props) => { } return ( - toggleState() + toggleState() ); } diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/AccordionHeader.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/AccordionHeader.test.js index 7685340..987f1fc 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/AccordionHeader.test.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/AccordionHeader.test.js @@ -27,12 +27,24 @@ import toJson from "enzyme-to-json"; describe('Verify AccordionHeader', () => { const index = 0; - const title = "PMSH Instance"; - const orderState = "UNINITIALISED"; - const container = shallow(); it("renders correctly", () => { + const container = shallow(); expect(toJson(container)).toMatchSnapshot(); }); + it("renders correctly when orderState is uninitialized", () => { + const container = shallow(); + expect(toJson(container)).toMatchSnapshot(); + }); + + it("renders correctly when orderState is passive", () => { + const container = shallow(); + expect(toJson(container)).toMatchSnapshot(); + }); + + it("renders correctly when orderState is running", () => { + const container = shallow(); + expect(toJson(container)).toMatchSnapshot(); + }); }); \ No newline at end of file diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ChangeOrderStateModal.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ChangeOrderStateModal.js index d8efd3a..3486ebf 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ChangeOrderStateModal.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ChangeOrderStateModal.js @@ -20,7 +20,7 @@ import styled from "styled-components"; import Modal from "react-bootstrap/Modal"; import Button from "react-bootstrap/Button"; -import React, { useContext, useEffect, useRef, useState } from "react"; +import React, { useEffect, useState } from "react"; import InstantiationOrderStateChangeItem from "./InstantiationOrderStateChangeItem"; import ControlLoopService from "../../../api/ControlLoopService"; import { Alert, Container, Dropdown } from "react-bootstrap"; diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/MonitorInstantiation.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/MonitorInstantiation.test.js index cce6225..ea98073 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/MonitorInstantiation.test.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/MonitorInstantiation.test.js @@ -17,40 +17,77 @@ * ============LICENSE_END========================================================= */ -import { shallow } from "enzyme"; +import React from "react"; +import { mount, shallow } from "enzyme"; import toJson from "enzyme-to-json"; +import { act } from "react-dom/test-utils"; import { createMemoryHistory } from "history"; -import React from "react"; import MonitorInstantiation from "./MonitorInstantiation"; -import { act } from "react-dom/test-utils"; +import ControlLoopService from "../../../api/ControlLoopService"; +import clLoopList from "./testFiles/monitoringControlLoopList.json"; + +const logSpy = jest.spyOn(console, 'error') +const history = createMemoryHistory(); + +describe('Verify MonitorInstantiation', () => { + const flushPromises = () => new Promise(setImmediate); -describe('Verify MonitoringInstantiation', () => { - const container = shallow(); - const containerWithHistory = shallow(); + beforeEach(() => { + logSpy.mockClear(); + }); it("renders correctly", () => { + const container = shallow(); expect(toJson(container)).toMatchSnapshot(); }); it('should have a Button element', () => { + const container = shallow(); expect(container.find('Button').length).toEqual(1); }); it('handleClose called when bottom button clicked', () => { + const container = shallow(); const logSpy = jest.spyOn(console, 'log'); act(() => { - containerWithHistory.find('[variant="secondary"]').simulate('click'); + container.find('[variant="secondary"]').simulate('click'); expect(logSpy).toHaveBeenCalledWith('handleClose called'); }); }); it('handleClose called when top-right button clicked', () => { + const container = shallow(); const logSpy = jest.spyOn(console, 'log'); act(() => { - containerWithHistory.find('[size="xl"]').get(0).props.onHide(); + container.find('[size="xl"]').get(0).props.onHide(); expect(logSpy).toHaveBeenCalledWith('handleClose called'); }); }); + + it('Check useEffect is being called', async () => { + jest.resetAllMocks(); + jest.spyOn(ControlLoopService, 'getControlLoopInstantiation') + .mockImplementationOnce(async () => { + return Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(clLoopList); + } + }); + }); + + const component = mount(); + const useEffect = jest.spyOn(React, "useEffect"); + + await act(async () => { + await flushPromises() + component.update(); + await expect(useEffect).toHaveBeenCalled(); + }); + component.unmount(); + }); }); diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/AccordionHeader.test.js.snap b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/AccordionHeader.test.js.snap index b4a707b..da86eb7 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/AccordionHeader.test.js.snap +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/AccordionHeader.test.js.snap @@ -1,3 +1,211 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Verify AccordionHeader renders correctly 1`] = `""`; +exports[`Verify AccordionHeader renders correctly 1`] = ` + + + +`; + +exports[`Verify AccordionHeader renders correctly when orderState is passive 1`] = ` + + + PASSIVE_TEST + + +`; + +exports[`Verify AccordionHeader renders correctly when orderState is running 1`] = ` + + + RUNNING_TEST + + +`; + +exports[`Verify AccordionHeader renders correctly when orderState is uninitialized 1`] = ` + + + UNINITIALISED_TEST + + +`; diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/MonitorInstantiation.test.js.snap b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/MonitorInstantiation.test.js.snap index df5c243..ad1f7f1 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/MonitorInstantiation.test.js.snap +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/MonitorInstantiation.test.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Verify MonitoringInstantiation renders correctly 1`] = ` +exports[`Verify MonitorInstantiation renders correctly 1`] = `