Add react ui test

Add react ui test to improve code coverage.

Issue-ID: CLAMP-509
Change-Id: Ic9c974a78ee453dddb8f985f3e9c9067f66e95d9
Signed-off-by: xuegao <xg353y@intl.att.com>
diff --git a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.test.js b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.test.js
index 934fa49..e0aa8c6 100644
--- a/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.test.js
+++ b/ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.test.js
@@ -29,13 +29,13 @@
 describe('Verify DeployLoop', () => {
     beforeEach(() => {
         fetch.resetMocks();
-		fetch.mockImplementation(() => {
-			return Promise.resolve({
-				ok: true,
-				status: 200,
-				text: () => "OK"
-			});
-		});
+        fetch.mockImplementation(() => {
+            return Promise.resolve({
+                ok: true,
+                status: 200,
+                text: () => "OK"
+            });
+        });
     })
     const loopCache = new LoopCache({
             "name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
@@ -59,7 +59,7 @@
 
       expect(handleClose).toHaveBeenCalledTimes(1);
       expect(component.state('show')).toEqual(false);
-      expect(historyMock.push.mock.calls[0]).toEqual([ '/', ]);
+      expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
     });
 
     it('Test handleSave', async () => {
@@ -74,6 +74,6 @@
         expect(handleSave).toHaveBeenCalledTimes(1);
         expect(component.state('show')).toEqual(false);
         expect(component.state('componentName')).toEqual("TCA_h2NMX_v1_0_ResourceInstanceName1_tca");
-        expect(historyMock.push.mock.calls[0]).toEqual([ '/', ]);
+        expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
     });
 });
\ No newline at end of file
diff --git a/ui-react/src/components/dialogs/DeployLoop.test.js b/ui-react/src/components/dialogs/DeployLoop.test.js
index bb08baf..2959ed6 100644
--- a/ui-react/src/components/dialogs/DeployLoop.test.js
+++ b/ui-react/src/components/dialogs/DeployLoop.test.js
@@ -24,6 +24,8 @@
 import { shallow } from 'enzyme';
 import DeployLoop from './DeployLoop';
 import LoopCache from '../../api/LoopCache';
+import LoopActionService from '../../api/LoopActionService';
+import LoopService from '../../api/LoopService';
 
 describe('Verify DeployLoop', () => {
 	const loopCache = new LoopCache({
@@ -43,4 +45,67 @@
 
 	expect(component).toMatchSnapshot();
 	});
+	
+	it('Test handleClose', () => {
+		const historyMock = { push: jest.fn() };
+		const handleClose = jest.spyOn(DeployLoop.prototype,'handleClose');
+		const component = shallow(<DeployLoop history={historyMock} loopCache={loopCache}/>)
+
+		component.find('[variant="secondary"]').prop('onClick')();
+
+		expect(handleClose).toHaveBeenCalledTimes(1);
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+	});
+
+	it('Test handleSave successful', async () => {
+		const flushPromises = () => new Promise(setImmediate);
+		const historyMock = { push: jest.fn() };
+		const updateLoopFunction = jest.fn();
+		const handleSave = jest.spyOn(DeployLoop.prototype,'handleSave');
+		LoopService.updateGlobalProperties = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				text: () => "OK"
+			});
+		});
+		LoopActionService.performAction = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				json: () => {}
+			});
+		});
+		LoopActionService.refreshStatus = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				json: () => {}
+			});
+		});
+		const jsdomAlert = window.alert;
+		window.alert = () => {};
+		const component = shallow(<DeployLoop history={historyMock} 
+						loopCache={loopCache} updateLoopFunction={updateLoopFunction} />)
+
+		component.find('[variant="primary"]').prop('onClick')();
+		await flushPromises();
+		component.update();
+
+		expect(handleSave).toHaveBeenCalledTimes(1);
+		expect(component.state('show')).toEqual(false);
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+		window.alert = jsdomAlert;
+		handleSave.mockClear();
+	});
+
+	it('Onchange event', () => {
+		const event = { target: { name: "location_id", value: "testLocation"} };
+		const component = shallow(<DeployLoop loopCache={loopCache}/>);
+		const forms = component.find('StateManager');
+
+		component.find('[name="location_id"]').simulate('change', event);
+		component.update();
+		expect(component.state('temporaryPropertiesJson').dcaeDeployParameters.location_id).toEqual("testLocation");
+	});
 });
\ No newline at end of file
diff --git a/ui-react/src/components/dialogs/LoopProperties.test.js b/ui-react/src/components/dialogs/LoopProperties.test.js
index fadb909..9b74fe7 100644
--- a/ui-react/src/components/dialogs/LoopProperties.test.js
+++ b/ui-react/src/components/dialogs/LoopProperties.test.js
@@ -24,6 +24,7 @@
 import { shallow } from 'enzyme';
 import LoopProperties from './LoopProperties';
 import LoopCache from '../../api/LoopCache';
+import LoopService from '../../api/LoopService';
 
 describe('Verify LoopProperties', () => {
 	const loopCache = new LoopCache({
@@ -58,4 +59,50 @@
 
 	expect(component).toMatchSnapshot();
 	});
+
+	it('Test handleClose', () => {
+		const historyMock = { push: jest.fn() };
+		const handleClose = jest.spyOn(LoopProperties.prototype,'handleClose');
+		const component = shallow(<LoopProperties history={historyMock} loopCache={loopCache}/>)
+
+		component.find('[variant="secondary"]').prop('onClick')();
+
+		expect(handleClose).toHaveBeenCalledTimes(1);
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+	});
+
+	it('Test handleSave successful', async () => {
+		const flushPromises = () => new Promise(setImmediate);
+		const historyMock = { push: jest.fn() };
+		const loadLoopFunction = jest.fn();
+		const handleSave = jest.spyOn(LoopProperties.prototype,'handleSave');
+		LoopService.updateGlobalProperties = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				text: () => "OK"
+			});
+		});
+
+		const component = shallow(<LoopProperties history={historyMock} 
+						loopCache={loopCache} loadLoopFunction={loadLoopFunction} />)
+
+		component.find('[variant="primary"]').prop('onClick')();
+		await flushPromises();
+		component.update();
+
+		expect(handleSave).toHaveBeenCalledTimes(1);
+		expect(component.state('show')).toEqual(false);
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+	});
+
+	it('Onchange event', () => {
+		const event = {target:{name:"dcaeDeployParameters", value:"{\"location_id\": \"testLocation\",\"policy_id\": \"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\"}"}};
+		const component = shallow(<LoopProperties loopCache={loopCache}/>);
+
+		component.find('FormControl').simulate('change', event);
+		component.update();
+
+		expect(component.state('temporaryPropertiesJson').dcaeDeployParameters.location_id).toEqual("testLocation");
+	});
 });
diff --git a/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.test.js b/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.test.js
index 5153de9..208c947 100644
--- a/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.test.js
+++ b/ui-react/src/components/dialogs/OpenLoop/OpenLoopModal.test.js
@@ -34,9 +34,9 @@
         "LOOP_gmtAS_v1_0_ResourceInstanceName2_tca_2"
       ]));
   })
-  
+
     it('Test the render method', () => {
-      
+
     const component = shallow(<OpenLoopModal/>);
     expect(component).toMatchSnapshot();
   });
@@ -44,7 +44,6 @@
   it('Onchange event', () => {
     const event = {value: 'LOOP_gmtAS_v1_0_ResourceInstanceName1_tca_3'};
     const component = shallow(<OpenLoopModal/>);
-	const forms = component.find('StateManager');
 
     component.find('StateManager').simulate('change', event);
     component.update();
@@ -60,7 +59,7 @@
 
     expect(handleClose).toHaveBeenCalledTimes(1);
     expect(component.state('show')).toEqual(false);
-    expect(historyMock.push.mock.calls[0]).toEqual([ '/', ]);
+    expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
     
     handleClose.mockClear();
   });
@@ -75,8 +74,8 @@
 
     expect(handleOpen).toHaveBeenCalledTimes(1);
     expect(component.state('show')).toEqual(false);
-    expect(historyMock.push.mock.calls[0]).toEqual([ '/', ]);
-    
+    expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+
     handleOpen.mockClear();
   });
 
diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.test.js b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.test.js
index da60b67..9c7da31 100644
--- a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.test.js
+++ b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.test.js
@@ -28,13 +28,13 @@
 describe('Verify OperationalPolicyModal', () => {
     beforeEach(() => {
         fetch.resetMocks();
-		fetch.mockImplementation(() => {
-			return Promise.resolve({
-				ok: true,
-				status: 200,
-				text: () => "OK"
-			});
-		});
+        fetch.mockImplementation(() => {
+            return Promise.resolve({
+                ok: true,
+                status: 200,
+                text: () => "OK"
+            });
+        });
     })
     const loopCache = new LoopCache({
             "name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
@@ -52,7 +52,7 @@
     });
     const historyMock = { push: jest.fn() };
     const flushPromises = () => new Promise(setImmediate);
-	
+
     it('Test handleClose', () => {
       const handleClose = jest.spyOn(OperationalPolicyModal.prototype,'handleClose');
       const component = mount(<OperationalPolicyModal history={historyMock} loopCache={loopCache}/>)
@@ -61,13 +61,14 @@
 
       expect(handleClose).toHaveBeenCalledTimes(1);
       expect(component.state('show')).toEqual(false);
-      expect(historyMock.push.mock.calls[0]).toEqual([ '/', ]);
+      expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
     });
 
     it('Test handleSave', async () => {
         const loadLoopFunction = jest.fn();
         const handleSave = jest.spyOn(OperationalPolicyModal.prototype,'handleSave');
-        const component = mount(<OperationalPolicyModal history={historyMock} loopCache={loopCache} loadLoopFunction={loadLoopFunction} />)
+        const component = mount(<OperationalPolicyModal history={historyMock} 
+                          loopCache={loopCache} loadLoopFunction={loadLoopFunction} />)
 
         component.find('[variant="primary"]').prop('onClick')();
         await flushPromises();
@@ -75,6 +76,6 @@
 
         expect(handleSave).toHaveBeenCalledTimes(1);
         expect(component.state('show')).toEqual(false);
-        expect(historyMock.push.mock.calls[0]).toEqual([ '/', ]);
+        expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
     });
 });
\ No newline at end of file
diff --git a/ui-react/src/components/dialogs/PerformActions.test.js b/ui-react/src/components/dialogs/PerformActions.test.js
new file mode 100644
index 0000000..56fdcf3
--- /dev/null
+++ b/ui-react/src/components/dialogs/PerformActions.test.js
@@ -0,0 +1,88 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+import React from 'react';
+import { shallow } from 'enzyme';
+import PerformActions from './PerformActions';
+import LoopCache from '../../api/LoopCache';
+import LoopActionService from '../../api/LoopActionService';
+
+describe('Verify PerformActions', () => {
+
+	const loopCache = new LoopCache({
+		"name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca"
+	});
+
+	it('Test the render method action failed', async () => {
+		const flushPromises = () => new Promise(setImmediate);
+		const historyMock = { push: jest.fn() };
+		const updateLoopFunction = jest.fn();
+		
+		LoopActionService.refreshStatus = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				json: () => {}
+			});
+		});
+		const jsdomAlert = window.alert;
+		window.alert = () => {};
+		const component = shallow(<PerformActions loopCache={loopCache} 
+					loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} />)
+		await flushPromises();
+		component.update();
+
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+		window.alert = jsdomAlert;
+	});
+
+	it('Test the render method action successful', async () => {
+		const flushPromises = () => new Promise(setImmediate);
+		const historyMock = { push: jest.fn() };
+		const updateLoopFunction = jest.fn();
+
+		LoopActionService.performAction = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				json: () => {}
+			});
+		});		
+		LoopActionService.refreshStatus = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				json: () => {}
+			});
+		});
+		const jsdomAlert = window.alert;
+		window.alert = () => {};
+		const component = shallow(<PerformActions loopCache={loopCache} 
+						loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} />)
+		await flushPromises();
+		component.update();
+
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+		window.alert = jsdomAlert;
+	});
+
+});
diff --git a/ui-react/src/components/dialogs/RefreshStatus.test.js b/ui-react/src/components/dialogs/RefreshStatus.test.js
new file mode 100644
index 0000000..cb782ad
--- /dev/null
+++ b/ui-react/src/components/dialogs/RefreshStatus.test.js
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+import React from 'react';
+import { shallow } from 'enzyme';
+import RefreshStatus from './RefreshStatus';
+import LoopCache from '../../api/LoopCache';
+import LoopActionService from '../../api/LoopActionService';
+
+describe('Verify RefreshStatus', () => {
+
+	const loopCache = new LoopCache({
+		"name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca"
+	});
+
+	it('Test refresh status failed', async () => {
+		const flushPromises = () => new Promise(setImmediate);
+		const historyMock = { push: jest.fn() };
+
+		const jsdomAlert = window.alert;
+		window.alert = () => {};
+		const component = shallow(<RefreshStatus loopCache={loopCache} history={historyMock} />)
+		await flushPromises();
+		component.update();
+
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+		window.alert = jsdomAlert;
+	});
+
+	it('Test refresh status successful', async () => {
+		const flushPromises = () => new Promise(setImmediate);
+		const historyMock = { push: jest.fn() };
+		const updateLoopFunction = jest.fn();
+
+		LoopActionService.refreshStatus = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				json: () => {}
+			});
+		});
+		const jsdomAlert = window.alert;
+		window.alert = () => {};
+		const component = shallow(<RefreshStatus loopCache={loopCache} 
+						loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} />)
+		await flushPromises();
+		component.update();
+
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+		window.alert = jsdomAlert;
+	});
+
+});
diff --git a/ui-react/src/components/dialogs/UserInfo.test.js b/ui-react/src/components/dialogs/UserInfo.test.js
index 186dac8..beddde1 100644
--- a/ui-react/src/components/dialogs/UserInfo.test.js
+++ b/ui-react/src/components/dialogs/UserInfo.test.js
@@ -35,7 +35,7 @@
 				json: () => {
 					return Promise.resolve({
 						"userName": "test",
-						"cldsVersion": "1.0.0",
+						"cldsVersion": "1.0.0"
 					});
 			}});
 		});