aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/swagger/swagger.pdf4
-rw-r--r--src/main/java/org/onap/clamp/clds/config/AafConfiguration.java1
-rw-r--r--src/main/resources/META-INF/resources/swagger.html2
-rw-r--r--src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java39
-rw-r--r--src/test/resources/tosca/policy-yaml-to-json-with-constraints.json63
-rw-r--r--src/test/resources/tosca/policy-yaml-to-json-with-datatypes.json108
-rw-r--r--src/test/resources/tosca/tosca-with-constraints.yaml54
-rw-r--r--src/test/resources/tosca/tosca-with-datatypes.yaml63
-rw-r--r--ui-react/package.json11
-rw-r--r--ui-react/src/components/dialogs/DeployLoop.js2
-rw-r--r--ui-react/src/components/dialogs/DeployLoop.test.js46
-rw-r--r--ui-react/src/components/dialogs/LoopProperties.test.js61
-rw-r--r--ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js18
-rw-r--r--ui-react/src/components/dialogs/UserInfo.test.js86
-rw-r--r--ui-react/src/components/dialogs/__snapshots__/DeployLoop.test.js.snap66
-rw-r--r--ui-react/src/components/dialogs/__snapshots__/LoopProperties.test.js.snap59
-rw-r--r--ui-react/src/components/dialogs/__snapshots__/UserInfo.test.js.snap137
-rw-r--r--ui-react/src/components/loop_viewer/logs/LoopLogs.test.js48
-rw-r--r--ui-react/src/components/loop_viewer/logs/__snapshots__/LoopLogs.test.js.snap61
-rw-r--r--ui-react/src/components/loop_viewer/status/LoopStatus.test.js54
-rw-r--r--ui-react/src/components/loop_viewer/status/__snapshots__/LoopStatus.test.js.snap64
-rw-r--r--ui-react/src/components/loop_viewer/svg/LoopSvg.test.js34
-rw-r--r--ui-react/src/components/loop_viewer/svg/__snapshots__/LoopSvg.test.js.snap7
-rw-r--r--ui-react/src/components/menu/MenuBar.test.js46
-rw-r--r--ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap594
25 files changed, 1717 insertions, 11 deletions
diff --git a/docs/swagger/swagger.pdf b/docs/swagger/swagger.pdf
index 12c221637..5f3307b6e 100644
--- a/docs/swagger/swagger.pdf
+++ b/docs/swagger/swagger.pdf
@@ -4,8 +4,8 @@
<< /Title (Clamp Rest API)
/Creator (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0)
/Producer (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0)
-/CreationDate (D:20190911145449+02'00')
-/ModDate (D:20190911145449+02'00')
+/CreationDate (D:20190919142605+02'00')
+/ModDate (D:20190919142605+02'00')
>>
endobj
2 0 obj
diff --git a/src/main/java/org/onap/clamp/clds/config/AafConfiguration.java b/src/main/java/org/onap/clamp/clds/config/AafConfiguration.java
index b137378d3..5bcb0c555 100644
--- a/src/main/java/org/onap/clamp/clds/config/AafConfiguration.java
+++ b/src/main/java/org/onap/clamp/clds/config/AafConfiguration.java
@@ -60,7 +60,6 @@ public class AafConfiguration {
registration.addUrlPatterns("/restservices/clds/v1/dictionary/*");
registration.addUrlPatterns("/restservices/clds/v1/user/*");
registration.addUrlPatterns("/restservices/clds/v2/loop/*");
- //registration.addUrlPatterns("*");
registration.setName("cadiFilter");
registration.setOrder(0);
return registration;
diff --git a/src/main/resources/META-INF/resources/swagger.html b/src/main/resources/META-INF/resources/swagger.html
index 49bbe0f5a..17507b662 100644
--- a/src/main/resources/META-INF/resources/swagger.html
+++ b/src/main/resources/META-INF/resources/swagger.html
@@ -2388,7 +2388,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2019-09-11 13:30:19 CEST
+Last updated 2019-05-27 14:30:20 CEST
</div>
</div>
</body>
diff --git a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
index 65b95a100..00c9b7d0b 100644
--- a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
+++ b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
@@ -4,6 +4,7 @@
* ================================================================================
* Copyright (C) 2018 AT&T Intellectual Property. All rights
* reserved.
+ * Modifications Copyright (C) 2019 Huawei Technologies Co., Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,8 +38,7 @@ public class ToscaYamlToJsonConvertorTest {
* This Test validates TOSCA yaml to JSON Schema conversion based on JSON Editor
* Schema.
*
- * @throws IOException
- *
+ * @throws IOException In case of issue when opening the tosca yaml file and converted json file
*/
@Test
public final void testParseToscaYaml() throws IOException {
@@ -50,4 +50,39 @@ public class ToscaYamlToJsonConvertorTest {
JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json.json"),
parsedJsonSchema, true);
}
+
+ /**
+ * This Test validates TOSCA yaml with constraints to JSON Schema conversion based on JSON Editor
+ * Schema.
+ *
+ * @throws IOException In case of issue when opening the tosca yaml file and converted json file
+ */
+ @Test
+ public final void testParseToscaYamlWithConstraints() throws IOException {
+ String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca-with-constraints.yaml");
+ ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor();
+
+ String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml);
+ assertNotNull(parsedJsonSchema);
+ JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-constraints" +
+ ".json"),
+ parsedJsonSchema, true);
+ }
+
+ /**
+ * This Test validates TOSCA yaml with different datatypes to JSON Schema conversion based on JSON Editor
+ * Schema.
+ *
+ * @throws IOException In case of issue when opening the tosca yaml file and converted json file
+ */
+ @Test
+ public final void testParseToscaYamlWithTypes() throws IOException {
+ String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca-with-datatypes.yaml");
+ ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor();
+
+ String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml);
+ assertNotNull(parsedJsonSchema);
+ JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-datatypes.json"),
+ parsedJsonSchema, true);
+ }
}
diff --git a/src/test/resources/tosca/policy-yaml-to-json-with-constraints.json b/src/test/resources/tosca/policy-yaml-to-json-with-constraints.json
new file mode 100644
index 000000000..b2575486c
--- /dev/null
+++ b/src/test/resources/tosca/policy-yaml-to-json-with-constraints.json
@@ -0,0 +1,63 @@
+{
+ "schema": {
+ "uniqueItems": "true",
+ "format": "tabs-top",
+ "type": "array",
+ "title": "Properties with constraints",
+ "items": {
+ "type": "object",
+ "title": "Properties with constraints",
+ "required": [
+ "cpus",
+ "memSize"
+ ],
+ "properties": {
+ "appPassword": {
+ "propertyOrder": 1004,
+ "minLength": 6,
+ "title": "application password",
+ "type": "string",
+ "maxLength": 10
+ },
+ "cost": {
+ "exclusiveMaximum": 100.5,
+ "propertyOrder": 1005,
+ "type": "integer",
+ "exclusiveMinimum": 50.5
+ },
+ "keylength": {
+ "propertyOrder": 1007,
+ "type": "integer",
+ "enum": [
+ 128,
+ 256
+ ]
+ },
+ "cpus": {
+ "propertyOrder": 1001,
+ "default": 1,
+ "minLength": 1,
+ "type": "string",
+ "maxLength": 4
+ },
+ "ports": {
+ "propertyOrder": 1002,
+ "maximum": 9010,
+ "type": "integer",
+ "minimum": 9000
+ },
+ "memSize": {
+ "propertyOrder": 1003,
+ "maximum": 10,
+ "title": "memory size",
+ "type": "integer",
+ "minimum": 2
+ },
+ "algorithm": {
+ "propertyOrder": 1006,
+ "type": "string"
+ }
+ }
+ }
+ }
+}
diff --git a/src/test/resources/tosca/policy-yaml-to-json-with-datatypes.json b/src/test/resources/tosca/policy-yaml-to-json-with-datatypes.json
new file mode 100644
index 000000000..d470d928d
--- /dev/null
+++ b/src/test/resources/tosca/policy-yaml-to-json-with-datatypes.json
@@ -0,0 +1,108 @@
+{
+ "schema": {
+ "uniqueItems": "true",
+ "format": "tabs-top",
+ "type": "array",
+ "title": "Properties with different types",
+ "items": {
+ "type": "object",
+ "title": "Properties with different types",
+ "required": [
+ "memSize"
+ ],
+ "properties": {
+ "cpus": {
+ "propertyOrder": 1001,
+ "uniqueItems": "true",
+ "format": "tabs-top",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [],
+ "properties": {
+ "closedLoopControlName": {
+ "propertyOrder": 1002,
+ "type": "string"
+ }
+ }
+ }
+ },
+ "domain": {
+ "propertyOrder": 1009,
+ "type": "object",
+ "required": [],
+ "properties": {
+ "closedLoopControlName": {
+ "propertyOrder": 1002,
+ "type": "string"
+ }
+ }
+ },
+ "thresholdValue": {
+ "propertyOrder": 1007,
+ "uniqueItems": "true",
+ "format": "select",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ports": {
+ "propertyOrder": 1003,
+ "type": "object",
+ "items": {
+ "type": "string"
+ }
+ },
+ "closedLoopEventStatus": {
+ "propertyOrder": 1004,
+ "type": "object",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "version": {
+ "propertyOrder": 1008,
+ "uniqueItems": "true",
+ "format": "tabs-top",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [],
+ "properties": {
+ "closedLoopControlName": {
+ "propertyOrder": 1002,
+ "type": "string"
+ }
+ }
+ }
+ },
+ "memSize": {
+ "propertyOrder": 1006,
+ "required": [],
+ "properties": {
+ "name": {
+ "propertyOrder": 20002,
+ "required": [
+ "severity"
+ ],
+ "properties": {
+ "severity": {
+ "propertyOrder": 20003,
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "direction": {
+ "propertyOrder": 1005,
+ "type": "object",
+ "items": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/test/resources/tosca/tosca-with-constraints.yaml b/src/test/resources/tosca/tosca-with-constraints.yaml
new file mode 100644
index 000000000..959bc483b
--- /dev/null
+++ b/src/test/resources/tosca/tosca-with-constraints.yaml
@@ -0,0 +1,54 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+policy_types:
+ onap.policies.Monitoring:
+ derived_from: tosca.policies.Root
+ description: a base policy type for all policies that governs monitoring provisioning
+ onap.policies.monitoring.example.app:
+ derived_from: onap.policies.Monitoring
+ version: 1.0.0
+ properties:
+ example_policy:
+ type: map
+ description: Properties with constraints
+ entry_schema:
+ type: onap.datatypes.monitoring.example_policy
+data_types:
+ onap.datatypes.monitoring.example_policy:
+ derived_from: tosca.datatypes.Root
+ properties:
+ cpus:
+ type: string
+ required: true
+ default: 1
+ constraints:
+ - in_range: [ 1, 4 ]
+ ports:
+ type: integer
+ constraints:
+ - in_range: [ 9000, 9010 ]
+ memSize:
+ type: integer
+ required: true
+ description: memory size
+ constraints:
+ - greater_or_equal: 2
+ - less_or_equal: 10
+ appPassword:
+ type: string
+ description: application password
+ constraints:
+ - min_length: 6
+ - max_length: 10
+ cost:
+ type: float
+ constraints:
+ - less_than: 100.50
+ - greater_than: 50.50
+ algorithm:
+ type: string
+ constraints:
+ - equal: aes
+ keylength:
+ type: integer
+ constraints:
+ - valid_values: [ 128, 256 ]
diff --git a/src/test/resources/tosca/tosca-with-datatypes.yaml b/src/test/resources/tosca/tosca-with-datatypes.yaml
new file mode 100644
index 000000000..61d5dbcc8
--- /dev/null
+++ b/src/test/resources/tosca/tosca-with-datatypes.yaml
@@ -0,0 +1,63 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+policy_types:
+ onap.policies.Monitoring:
+ derived_from: tosca.policies.Root
+ description: a base policy type for all policies that governs monitoring provisioning
+ onap.policies.monitoring.example.app:
+ derived_from: onap.policies.Monitoring
+ version: 1.0.0
+ properties:
+ example_policy:
+ type: map
+ description: Properties with different types
+ entry_schema:
+ type: onap.datatypes.monitoring.example_policy
+data_types:
+ onap.datatypes.monitoring.example2:
+ derived_from: tosca.datatypes.Root
+ properties:
+ closedLoopControlName:
+ type: string
+ onap.datatypes.monitoring.example3:
+ derived_from: tosca.datatypes.Root
+ properties:
+ name:
+ type: onap.datatypes.monitoring.example4
+ onap.datatypes.monitoring.example4:
+ derived_from: tosca.datatypes.Root
+ properties:
+ severity:
+ type: string
+ required: true
+ onap.datatypes.monitoring.example_policy:
+ derived_from: tosca.datatypes.Root
+ properties:
+ cpus:
+ type: list
+ entry_schema:
+ type: onap.datatypes.monitoring.example2
+ ports:
+ type: map
+ entry_schema:
+ type: string
+ closedLoopEventStatus:
+ type: map
+ entry_schema:
+ type: integer
+ direction:
+ type: map
+ entry_schema:
+ type: float
+ memSize:
+ type: onap.datatypes.monitoring.example3
+ required: true
+ thresholdValue:
+ type: list
+ entry_schema:
+ type: string
+ version:
+ type: list
+ entry_schema:
+ type: onap.datatypes.monitoring.example2
+ domain:
+ type: onap.datatypes.monitoring.example2 \ No newline at end of file
diff --git a/ui-react/package.json b/ui-react/package.json
index dffe698c3..4a363ab51 100644
--- a/ui-react/package.json
+++ b/ui-react/package.json
@@ -63,8 +63,15 @@
"coverageReporters": [
"lcov"
],
- "setupFiles": ["./src/setupTests.js"],
- "snapshotSerializers": ["enzyme-to-json/serializer"]
+ "moduleNameMapper": {
+ "\\.(css|png)$": "identity-obj-proxy"
+ },
+ "setupFiles": [
+ "./src/setupTests.js"
+ ],
+ "snapshotSerializers": [
+ "enzyme-to-json/serializer"
+ ]
},
"babel": {
"presets": [
diff --git a/ui-react/src/components/dialogs/DeployLoop.js b/ui-react/src/components/dialogs/DeployLoop.js
index 2ec395d23..805f0f29b 100644
--- a/ui-react/src/components/dialogs/DeployLoop.js
+++ b/ui-react/src/components/dialogs/DeployLoop.js
@@ -58,7 +58,7 @@ export default class DeployLoop extends React.Component {
handleClose(){
this.props.history.push('/');
}
- handleSave(e) {
+ handleSave() {
const loopName = this.props.loopCache.getLoopName();
// save the global propserties
LoopService.updateGlobalProperties(loopName, this.state.temporaryPropertiesJson).then(resp => {
diff --git a/ui-react/src/components/dialogs/DeployLoop.test.js b/ui-react/src/components/dialogs/DeployLoop.test.js
new file mode 100644
index 000000000..bb08baf10
--- /dev/null
+++ b/ui-react/src/components/dialogs/DeployLoop.test.js
@@ -0,0 +1,46 @@
+/*-
+ * ============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 DeployLoop from './DeployLoop';
+import LoopCache from '../../api/LoopCache';
+
+describe('Verify DeployLoop', () => {
+ const loopCache = new LoopCache({
+ "name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
+ "globalPropertiesJson": {
+ "dcaeDeployParameters": {
+ "location_id": "",
+ "policy_id": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca"
+ }
+ }
+ });
+
+ it('Test the render method', () => {
+ const component = shallow(
+ <DeployLoop loopCache={loopCache}/>
+ )
+
+ expect(component).toMatchSnapshot();
+ });
+}); \ 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
new file mode 100644
index 000000000..fadb9099e
--- /dev/null
+++ b/ui-react/src/components/dialogs/LoopProperties.test.js
@@ -0,0 +1,61 @@
+/*-
+ * ============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 LoopProperties from './LoopProperties';
+import LoopCache from '../../api/LoopCache';
+
+describe('Verify LoopProperties', () => {
+ const loopCache = new LoopCache({
+ "name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
+ "globalPropertiesJson": {
+ "dcaeDeployParameters": {
+ "location_id": "",
+ "policy_id": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca"
+ }
+ }
+ });
+
+ it('Test the render method', () => {
+ const component = shallow(
+ <LoopProperties loopCache={loopCache}/>
+ )
+ component.setState({ show: true,
+ temporaryPropertiesJson: {
+ "dcaeDeployParameters": {
+ "location_id": "",
+ "policy_id": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca"
+ }
+ }
+ });
+
+ expect(component.state('temporaryPropertiesJson')).toEqual({
+ "dcaeDeployParameters": {
+ "location_id": "",
+ "policy_id": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca"}
+ });
+ expect(component.state('show')).toEqual(true);
+
+ expect(component).toMatchSnapshot();
+ });
+});
diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
index 1ebe5f0e8..4dc1f90a0 100644
--- a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
+++ b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
@@ -77,8 +77,22 @@ export default class OperationalPolicyModal extends React.Component {
}
setDefaultJsonEditorOptions() {
- JSONEditor.defaults.options.theme = 'bootstrap4';
-
+ JSONEditor.defaults.themes.myBootstrap4 = JSONEditor.defaults.themes.bootstrap4.extend({
+ getTab: function(text,tabId) {
+ var liel = document.createElement('li');
+ liel.classList.add('nav-item');
+ var ael = document.createElement("a");
+ ael.classList.add("nav-link");
+ ael.setAttribute("style",'padding:10px;max-width:160px;');
+ ael.setAttribute("href", "#" + tabId);
+ ael.setAttribute('data-toggle', 'tab');
+ text.setAttribute("style",'word-wrap:break-word;');
+ ael.appendChild(text);
+ liel.appendChild(ael);
+ return liel;
+ }
+ });
+ JSONEditor.defaults.options.theme = 'myBootstrap4';
JSONEditor.defaults.options.object_layout = 'grid';
JSONEditor.defaults.options.disable_properties = true;
JSONEditor.defaults.options.disable_edit_json = false;
diff --git a/ui-react/src/components/dialogs/UserInfo.test.js b/ui-react/src/components/dialogs/UserInfo.test.js
new file mode 100644
index 000000000..186dac832
--- /dev/null
+++ b/ui-react/src/components/dialogs/UserInfo.test.js
@@ -0,0 +1,86 @@
+/*-
+ * ============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 UserInfo from './UserInfo';
+
+describe('Verify UserInfo', () => {
+
+ beforeEach(() => {
+ fetch.resetMocks();
+ fetch.mockImplementation(() => {
+ return Promise.resolve({
+ ok: true,
+ status: 200,
+ json: () => {
+ return Promise.resolve({
+ "userName": "test",
+ "cldsVersion": "1.0.0",
+ });
+ }});
+ });
+ })
+
+ it('Test the render method full permission', () => {
+ const component = shallow(<UserInfo />)
+ component.setState({ userInfo: {
+ "userName": "test",
+ "cldsVersion": "1.0.0",
+ "permissionReadCl": true,
+ "permissionReadTemplate" : true,
+ "permissionReadTosca" : true,
+ "permissionUpdateTemplate" : true,
+ "permissionUpdateCl" : true,
+ "permissionUpdateTosca": true
+ }});
+ expect(component).toMatchSnapshot();
+ });
+
+ it('Test the render method no permission', () => {
+ const component = shallow(<UserInfo />)
+ component.setState({ userInfo: {}
+ });
+
+ expect(component.find('FormControl').length).toEqual(0);
+ });
+
+ it('Test the render method read permission', () => {
+ const component = shallow(<UserInfo />)
+ component.setState({ userInfo: {
+ "userName": "test",
+ "cldsVersion": "1.0.0",
+ "permissionReadCl": true,
+ "permissionReadTemplate" : true,
+ "permissionReadTosca" : true
+ }});
+
+ expect(component.find('FormControl').length).toEqual(5);
+
+ const forms = component.find('FormControl');
+ expect(forms.get(0).props.defaultValue).toEqual("test");
+ expect(forms.get(1).props.defaultValue).toEqual("1.0.0");
+ expect(forms.get(2).props.defaultValue).toEqual("Read Template");
+ expect(forms.get(3).props.defaultValue).toEqual("Read Model");
+ expect(forms.get(4).props.defaultValue).toEqual("Read Tosca");
+ });
+});
diff --git a/ui-react/src/components/dialogs/__snapshots__/DeployLoop.test.js.snap b/ui-react/src/components/dialogs/__snapshots__/DeployLoop.test.js.snap
new file mode 100644
index 000000000..1fd4b1047
--- /dev/null
+++ b/ui-react/src/components/dialogs/__snapshots__/DeployLoop.test.js.snap
@@ -0,0 +1,66 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify DeployLoop Test the render method 1`] = `
+<Styled(Bootstrap(Modal))
+ onHide={[Function]}
+ show={true}
+ size="lg"
+>
+ <ModalHeader
+ closeButton={true}
+ closeLabel="Close"
+ >
+ <ModalTitle>
+ Deployment parameters
+ </ModalTitle>
+ </ModalHeader>
+ <Styled(FormGroup)>
+ <FormLabel
+ column={false}
+ srOnly={false}
+ >
+ location_id
+ </FormLabel>
+ <FormControl
+ defaultValue=""
+ name="location_id"
+ onChange={[Function]}
+ type="text"
+ />
+ </Styled(FormGroup)>
+ <Styled(FormGroup)>
+ <FormLabel
+ column={false}
+ srOnly={false}
+ >
+ policy_id
+ </FormLabel>
+ <FormControl
+ defaultValue="TCA_h2NMX_v1_0_ResourceInstanceName1_tca"
+ name="policy_id"
+ onChange={[Function]}
+ type="text"
+ />
+ </Styled(FormGroup)>
+ <ModalFooter>
+ <Button
+ active={false}
+ disabled={false}
+ onClick={[Function]}
+ type="null"
+ variant="secondary"
+ >
+ Cancel
+ </Button>
+ <Button
+ active={false}
+ disabled={false}
+ onClick={[Function]}
+ type="submit"
+ variant="primary"
+ >
+ Deploy
+ </Button>
+ </ModalFooter>
+</Styled(Bootstrap(Modal))>
+`;
diff --git a/ui-react/src/components/dialogs/__snapshots__/LoopProperties.test.js.snap b/ui-react/src/components/dialogs/__snapshots__/LoopProperties.test.js.snap
new file mode 100644
index 000000000..c7e81c392
--- /dev/null
+++ b/ui-react/src/components/dialogs/__snapshots__/LoopProperties.test.js.snap
@@ -0,0 +1,59 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify LoopProperties Test the render method 1`] = `
+<Styled(Bootstrap(Modal))
+ onHide={[Function]}
+ show={true}
+ size="lg"
+>
+ <ModalHeader
+ closeButton={true}
+ closeLabel="Close"
+ >
+ <ModalTitle>
+ Model Properties
+ </ModalTitle>
+ </ModalHeader>
+ <ModalBody>
+ <Form
+ inline={false}
+ >
+ <FormGroup>
+ <FormLabel
+ column={false}
+ srOnly={false}
+ >
+ Deploy Parameters
+ </FormLabel>
+ <FormControl
+ as="textarea"
+ defaultValue="{\\"location_id\\":\\"\\",\\"policy_id\\":\\"TCA_h2NMX_v1_0_ResourceInstanceName1_tca\\"}"
+ name="dcaeDeployParameters"
+ onChange={[Function]}
+ rows="3"
+ />
+ </FormGroup>
+ </Form>
+ </ModalBody>
+ <ModalFooter>
+ <Button
+ active={false}
+ disabled={false}
+ onClick={[Function]}
+ type="null"
+ variant="secondary"
+ >
+ Cancel
+ </Button>
+ <Button
+ active={false}
+ disabled={false}
+ onClick={[Function]}
+ type="submit"
+ variant="primary"
+ >
+ Save Changes
+ </Button>
+ </ModalFooter>
+</Styled(Bootstrap(Modal))>
+`;
diff --git a/ui-react/src/components/dialogs/__snapshots__/UserInfo.test.js.snap b/ui-react/src/components/dialogs/__snapshots__/UserInfo.test.js.snap
new file mode 100644
index 000000000..1ae567a2d
--- /dev/null
+++ b/ui-react/src/components/dialogs/__snapshots__/UserInfo.test.js.snap
@@ -0,0 +1,137 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify UserInfo Test the render method full permission 1`] = `
+<Styled(Bootstrap(Modal))
+ onHide={[Function]}
+ show={true}
+ size="lg"
+>
+ <ModalHeader
+ closeButton={true}
+ closeLabel="Close"
+ >
+ <ModalTitle>
+ User Info
+ </ModalTitle>
+ </ModalHeader>
+ <ModalBody>
+ <FormGroup
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "defaultProps": Object {
+ "noGutters": false,
+ },
+ "render": [Function],
+ }
+ }
+ controlId="userName"
+ >
+ <FormLabel
+ column={true}
+ sm="3"
+ srOnly={false}
+ >
+ Current User:
+ </FormLabel>
+ <Col>
+ <FormControl
+ defaultValue="test"
+ plaintext={true}
+ readOnly={true}
+ />
+ </Col>
+ </FormGroup>
+ <FormGroup
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "defaultProps": Object {
+ "noGutters": false,
+ },
+ "render": [Function],
+ }
+ }
+ controlId="cldsVersion"
+ >
+ <FormLabel
+ column={true}
+ sm="3"
+ srOnly={false}
+ >
+ CLDS Version:
+ </FormLabel>
+ <Col>
+ <FormControl
+ defaultValue="1.0.0"
+ plaintext={true}
+ readOnly={true}
+ />
+ </Col>
+ </FormGroup>
+ <FormGroup
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "defaultProps": Object {
+ "noGutters": false,
+ },
+ "render": [Function],
+ }
+ }
+ controlId="userPermissions"
+ >
+ <FormLabel
+ column={true}
+ sm="3"
+ srOnly={false}
+ >
+ User Permissions:
+ </FormLabel>
+ <Col>
+ <FormControl
+ defaultValue="Read Template"
+ plaintext={true}
+ readOnly={true}
+ />
+ <FormControl
+ defaultValue="Read Model"
+ plaintext={true}
+ readOnly={true}
+ />
+ <FormControl
+ defaultValue="Read Tosca"
+ plaintext={true}
+ readOnly={true}
+ />
+ <FormControl
+ defaultValue="Edit Template"
+ plaintext={true}
+ readOnly={true}
+ />
+ <FormControl
+ defaultValue="Edit Model"
+ plaintext={true}
+ readOnly={true}
+ />
+ <FormControl
+ defaultValue="Edit Tosca"
+ plaintext={true}
+ readOnly={true}
+ />
+ </Col>
+ </FormGroup>
+ </ModalBody>
+ <ModalFooter>
+ <Button
+ active={false}
+ disabled={false}
+ onClick={[Function]}
+ type="null"
+ variant="secondary"
+ >
+ Cancel
+ </Button>
+ </ModalFooter>
+</Styled(Bootstrap(Modal))>
+`;
diff --git a/ui-react/src/components/loop_viewer/logs/LoopLogs.test.js b/ui-react/src/components/loop_viewer/logs/LoopLogs.test.js
new file mode 100644
index 000000000..3c76405c4
--- /dev/null
+++ b/ui-react/src/components/loop_viewer/logs/LoopLogs.test.js
@@ -0,0 +1,48 @@
+/*-
+ * ============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 LoopLogs from './LoopLogs';
+import LoopCache from '../../../api/LoopCache';
+
+describe('Verify LoopLogs', () => {
+
+ const loopCache = new LoopCache({
+ "name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
+ "loopLogs": [
+ {
+ "id": 1,
+ "logType": "INFO",
+ "logComponent": "CLAMP",
+ "message": "Operational and Guard policies UPDATED",
+ "logInstant": "2019-07-08T09:44:37Z"
+ }
+ ]
+ });
+
+ it('Test the render method', () => {
+ const component = shallow(<LoopLogs loopCache={loopCache}/>)
+
+ expect(component).toMatchSnapshot();
+ });
+}); \ No newline at end of file
diff --git a/ui-react/src/components/loop_viewer/logs/__snapshots__/LoopLogs.test.js.snap b/ui-react/src/components/loop_viewer/logs/__snapshots__/LoopLogs.test.js.snap
new file mode 100644
index 000000000..174a3202b
--- /dev/null
+++ b/ui-react/src/components/loop_viewer/logs/__snapshots__/LoopLogs.test.js.snap
@@ -0,0 +1,61 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify LoopLogs Test the render method 1`] = `
+<styled.div>
+ <label>
+ Loop Logs
+ </label>
+ <Styled(Bootstrap(Table))
+ hover={true}
+ responsive={true}
+ striped={true}
+ variant={true}
+ >
+ <thead>
+ <tr>
+ <th>
+ <span
+ align="left"
+ >
+ Date
+ </span>
+ </th>
+ <th>
+ <span
+ align="left"
+ >
+ Type
+ </span>
+ </th>
+ <th>
+ <span
+ align="left"
+ >
+ Component
+ </span>
+ </th>
+ <th>
+ <span
+ align="right"
+ >
+ Log
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <TableRow
+ logRow={
+ Object {
+ "id": 1,
+ "logComponent": "CLAMP",
+ "logInstant": "2019-07-08T09:44:37Z",
+ "logType": "INFO",
+ "message": "Operational and Guard policies UPDATED",
+ }
+ }
+ />
+ </tbody>
+ </Styled(Bootstrap(Table))>
+</styled.div>
+`;
diff --git a/ui-react/src/components/loop_viewer/status/LoopStatus.test.js b/ui-react/src/components/loop_viewer/status/LoopStatus.test.js
new file mode 100644
index 000000000..2be825edc
--- /dev/null
+++ b/ui-react/src/components/loop_viewer/status/LoopStatus.test.js
@@ -0,0 +1,54 @@
+/*-
+ * ============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 LoopStatus from './LoopStatus';
+import LoopCache from '../../../api/LoopCache';
+
+describe('Verify LoopStatus', () => {
+
+ const loopCache = new LoopCache({
+ "name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
+ "lastComputedState": "DESIGN",
+ "components": {
+ "POLICY": {
+ "componentState": {
+ "stateName": "NOT_SENT",
+ "description": "The policies defined have NOT yet been created on the policy engine"
+ }
+ },
+ "DCAE": {
+ "componentState": {
+ "stateName": "BLUEPRINT_DEPLOYED",
+ "description": "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop"
+ }
+ }
+ }
+ });
+
+ it('Test the render method', () => {
+ const component = shallow(<LoopStatus loopCache={loopCache}/>)
+
+ expect(component).toMatchSnapshot();
+ });
+}); \ No newline at end of file
diff --git a/ui-react/src/components/loop_viewer/status/__snapshots__/LoopStatus.test.js.snap b/ui-react/src/components/loop_viewer/status/__snapshots__/LoopStatus.test.js.snap
new file mode 100644
index 000000000..275933ee8
--- /dev/null
+++ b/ui-react/src/components/loop_viewer/status/__snapshots__/LoopStatus.test.js.snap
@@ -0,0 +1,64 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify LoopStatus Test the render method 1`] = `
+<styled.div>
+ <label>
+ Loop Status:
+ DESIGN
+ </label>
+ <div>
+ <Styled(Bootstrap(Table))
+ hover={true}
+ responsive={true}
+ striped={true}
+ variant={true}
+ >
+ <thead>
+ <tr>
+ <th>
+ <span
+ align="left"
+ >
+ Component Name
+ </span>
+ </th>
+ <th>
+ <span
+ align="left"
+ >
+ Component State
+ </span>
+ </th>
+ <th>
+ <span
+ align="right"
+ >
+ Description
+ </span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <TableRow
+ statusRow={
+ Object {
+ "componentName": "POLICY",
+ "description": "The policies defined have NOT yet been created on the policy engine",
+ "stateName": "NOT_SENT",
+ }
+ }
+ />
+ <TableRow
+ statusRow={
+ Object {
+ "componentName": "DCAE",
+ "description": "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop",
+ "stateName": "BLUEPRINT_DEPLOYED",
+ }
+ }
+ />
+ </tbody>
+ </Styled(Bootstrap(Table))>
+ </div>
+</styled.div>
+`;
diff --git a/ui-react/src/components/loop_viewer/svg/LoopSvg.test.js b/ui-react/src/components/loop_viewer/svg/LoopSvg.test.js
new file mode 100644
index 000000000..5a28328c9
--- /dev/null
+++ b/ui-react/src/components/loop_viewer/svg/LoopSvg.test.js
@@ -0,0 +1,34 @@
+/*-
+ * ============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 LoopSvg from './LoopSvg';
+
+describe('Verify LoopSvg', () => {
+
+ it('Test the render method', () => {
+ const component = shallow(<LoopSvg />)
+
+ expect(component).toMatchSnapshot();
+ });
+});
diff --git a/ui-react/src/components/loop_viewer/svg/__snapshots__/LoopSvg.test.js.snap b/ui-react/src/components/loop_viewer/svg/__snapshots__/LoopSvg.test.js.snap
new file mode 100644
index 000000000..23d22256f
--- /dev/null
+++ b/ui-react/src/components/loop_viewer/svg/__snapshots__/LoopSvg.test.js.snap
@@ -0,0 +1,7 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify LoopSvg Test the render method 1`] = `
+<ContextConsumer>
+ <Component />
+</ContextConsumer>
+`;
diff --git a/ui-react/src/components/menu/MenuBar.test.js b/ui-react/src/components/menu/MenuBar.test.js
new file mode 100644
index 000000000..3e96dbf38
--- /dev/null
+++ b/ui-react/src/components/menu/MenuBar.test.js
@@ -0,0 +1,46 @@
+/*-
+ * ============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 MenuBar from './MenuBar';
+
+describe('Verify MenuBar', () => {
+
+ it('Test the render method', () => {
+ const component = shallow(<MenuBar />)
+
+ expect(component).toMatchSnapshot();
+ });
+
+ it('Update loopName', () => {
+ const component = shallow(<MenuBar />)
+ component.setProps({ loopName: "newLoop" });
+ expect(component.state('disabled')).toBe(false);
+ });
+
+ it('Default loopName', () => {
+ const component = shallow(<MenuBar />)
+ component.setProps({ loopName: "Empty (NO loop loaded yet)" });
+ expect(component.state('disabled')).toBe(true);
+ });
+});
diff --git a/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap b/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap
new file mode 100644
index 000000000..3ee733463
--- /dev/null
+++ b/ui-react/src/components/menu/__snapshots__/MenuBar.test.js.snap
@@ -0,0 +1,594 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify MenuBar Test the render method 1`] = `
+<NavbarCollapse>
+ <Styled(NavDropdown)
+ title="Closed Loop"
+ >
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={false}
+ to="/openLoop"
+ >
+ Open CL
+ </DropdownItem>
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/loopProperties"
+ >
+ Properties CL
+ </DropdownItem>
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/closeLoop"
+ >
+ Close Model
+ </DropdownItem>
+ </Styled(NavDropdown)>
+ <Styled(NavDropdown)
+ title="Manage"
+ >
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/submit"
+ >
+ Submit
+ </DropdownItem>
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/stop"
+ >
+ Stop
+ </DropdownItem>
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/restart"
+ >
+ Restart
+ </DropdownItem>
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/delete"
+ >
+ Delete
+ </DropdownItem>
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/deploy"
+ >
+ Deploy
+ </DropdownItem>
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/undeploy"
+ >
+ UnDeploy
+ </DropdownItem>
+ </Styled(NavDropdown)>
+ <Styled(NavDropdown)
+ title="View"
+ >
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={true}
+ to="/refreshStatus"
+ >
+ Refresh Status
+ </DropdownItem>
+ </Styled(NavDropdown)>
+ <Styled(NavDropdown)
+ title="Help"
+ >
+ <Styled(NavLink)
+ href="https://wiki.onap.org/"
+ target="_blank"
+ >
+ Wiki
+ </Styled(NavLink)>
+ <Styled(NavLink)
+ href="mailto:onap-discuss@lists.onap.org?subject=CLAMP&body=Please send us suggestions or feature enhancements or defect. If possible, please send us the steps to replicate any defect."
+ >
+ Contact Us
+ </Styled(NavLink)>
+ <DropdownItem
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "attrs": Array [],
+ "componentStyle": ComponentStyle {
+ "componentId": "sc-kpOJdX",
+ "isStatic": false,
+ "rules": Array [
+ "
+ color: ",
+ [Function],
+ ";
+ background-color: ",
+ [Function],
+ ";
+ font-weight: normal;
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ text-align: inherit;
+ white-space: nowrap;
+ border: 0;
+ :hover {
+ text-decoration: none;
+ background-color: ",
+ [Function],
+ ";
+ color: ",
+ [Function],
+ ";
+ }
+",
+ ],
+ },
+ "displayName": "Styled(Link)",
+ "foldedComponentIds": Array [],
+ "render": [Function],
+ "styledComponentId": "sc-kpOJdX",
+ "target": [Function],
+ "toString": [Function],
+ "warnTooManyClasses": [Function],
+ "withComponent": [Function],
+ }
+ }
+ disabled={false}
+ to="/userInfo"
+ >
+ User Info
+ </DropdownItem>
+ </Styled(NavDropdown)>
+</NavbarCollapse>
+`;