diff --git a/gui-clamp/ui-react/src/LoopUI.test.js b/gui-clamp/ui-react/src/LoopUI.test.js
index 47ade44..083b233 100644
--- a/gui-clamp/ui-react/src/LoopUI.test.js
+++ b/gui-clamp/ui-react/src/LoopUI.test.js
@@ -4,6 +4,7 @@
  * ================================================================================
  * Copyright (C) 2019 AT&T Intellectual Property. All rights
  *                             reserved.
+ * Modifications Copyright (C) 2022 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,6 +30,14 @@
 import LoopActionService from './api/LoopActionService';
 import LoopService from './api/LoopService';
 
+import { ThemeConsumer } from 'styled-components'
+import { GlobalClampStyle } from './theme/globalStyle.js';
+import { DefaultClampTheme } from './theme/globalStyle.js';
+
+export const shallowWithTheme = (children, theme = DefaultClampTheme) => {
+  ThemeConsumer._currentValue = theme
+  return shallow(children)
+}
 describe('Verify LoopUI', () => {
   beforeEach(() => {
     fetch.resetMocks();
@@ -170,4 +179,9 @@
     expect(component.state('showFailAlert')).toEqual(true);
     expect(component.state('showMessage')).toEqual("testAlert2");
   })
+
+  test('Test renders correctly Clamp Style', () => {
+    let tree = shallowWithTheme(<GlobalClampStyle />);
+    expect(tree).toMatchSnapshot();
+  })
 });
diff --git a/gui-clamp/ui-react/src/__snapshots__/LoopUI.test.js.snap b/gui-clamp/ui-react/src/__snapshots__/LoopUI.test.js.snap
index c2a26fe..573a131 100644
--- a/gui-clamp/ui-react/src/__snapshots__/LoopUI.test.js.snap
+++ b/gui-clamp/ui-react/src/__snapshots__/LoopUI.test.js.snap
@@ -1,5 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`Verify LoopUI Test renders correctly Clamp Style 1`] = `""`;
+
 exports[`Verify LoopUI Test the render method 1`] = `
 <styled.div
   id="main_div"
diff --git a/gui-clamp/ui-react/src/index.test.js b/gui-clamp/ui-react/src/index.test.js
new file mode 100644
index 0000000..188a26e
--- /dev/null
+++ b/gui-clamp/ui-react/src/index.test.js
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2022 Nordix Foundation. 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 ReactDOM from "react-dom";
+import { Route, MemoryRouter } from 'react-router-dom'
+import OnapClamp from './OnapClamp';
+
+
+
+const routing = (
+  <MemoryRouter forceRefresh={ false }>
+    <Route path="/" component={ OnapClamp }/>
+  </MemoryRouter>
+);
+jest.mock("react-dom", () => ({ render: jest.fn() }));
+
+describe("Application root", () => {
+  it("should render without crashing", () => {
+    const div = document.createElement("div");
+    div.id = "root";
+    document.body.appendChild(div);
+    require("./index.js");
+    expect(ReactDOM.render).toHaveBeenCalledWith(routing, div);
+  });
+});
diff --git a/gui-clamp/ui-react/src/utils/OnapUtils.test.js b/gui-clamp/ui-react/src/utils/OnapUtils.test.js
new file mode 100644
index 0000000..7db23fd
--- /dev/null
+++ b/gui-clamp/ui-react/src/utils/OnapUtils.test.js
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2022 Nordix 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 OnapUtils from './OnapUtils'
+
+describe('Onap Utils Error Formatting', () => {
+
+    var error = {
+       message: "Please populate the required property Threshold",
+       path: "root.signatures.0",
+       property: "required"
+    };
+
+    var error2 = {
+        message: "Invalid data type Threshold",
+     };
+
+    var errorArray = [error, error2];
+    it('Test array formatting', () => {
+        var utils = new OnapUtils();
+        expect(utils.clickBlocked).toBeFalsy();
+        var expectedResult = "Please populate the required property Threshold" + '\n'
+            +"Invalid data type Threshold";
+        expect(OnapUtils.jsonEditorErrorFormatter(errorArray)).toEqual(expectedResult);
+    });
+
+    it('Test error not array formatting', () => {
+        let spy = {};
+        spy.console = jest.spyOn(console, 'error').mockImplementation(() => {});
+        OnapUtils.jsonEditorErrorFormatter(error);
+        expect(console.error).toHaveBeenCalled();
+        expect(spy.console.mock.calls[0][0]).toContain('jsoneEditorErrorFormatter was passed a non-array argument');
+        spy.console.mockRestore();
+    });
+});
\ No newline at end of file
