summaryrefslogtreecommitdiffstats
path: root/openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults')
-rw-r--r--openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults/SoftwareProductValidationResults.js28
-rw-r--r--openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults/SoftwareProductValidationResultsView.jsx207
2 files changed, 235 insertions, 0 deletions
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults/SoftwareProductValidationResults.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults/SoftwareProductValidationResults.js
new file mode 100644
index 0000000000..dffade7c9a
--- /dev/null
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults/SoftwareProductValidationResults.js
@@ -0,0 +1,28 @@
+/**
+ * Copyright (c) 2019 Vodafone Group
+ *
+ * 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.
+ */
+import { connect } from 'react-redux';
+import SoftwareProductValidationResultsView from './SoftwareProductValidationResultsView.jsx';
+
+export const mapStateToProps = ({ softwareProduct }) => {
+ let { softwareProductValidation } = softwareProduct;
+ return {
+ softwareProductValidation
+ };
+};
+
+export default connect(mapStateToProps, null, null, {
+ withRef: true
+})(SoftwareProductValidationResultsView);
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults/SoftwareProductValidationResultsView.jsx b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults/SoftwareProductValidationResultsView.jsx
new file mode 100644
index 0000000000..b6cc1d5bdc
--- /dev/null
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/validationResults/SoftwareProductValidationResultsView.jsx
@@ -0,0 +1,207 @@
+/**
+ * Copyright (c) 2019 Vodafone Group
+ *
+ * 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.
+ */
+import React from 'react';
+import PropTypes from 'prop-types';
+import Accordion from 'sdc-ui/lib/react/Accordion.js';
+import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js';
+import GridSection from 'nfvo-components/grid/GridSection.jsx';
+import GridItem from 'nfvo-components/grid/GridItem.jsx';
+import i18n from 'nfvo-utils/i18n/i18n.js';
+import unCamelCasedString from 'nfvo-utils/unCamelCaseString.js';
+
+const TestResultComponent = ({ tests }) => {
+ return (
+ <div>
+ {tests.map((test, index) => {
+ let name = 'errorCircle';
+ let color = 'warning';
+ if (
+ test.testResult &&
+ test.testResult.toLowerCase() === 'pass'
+ ) {
+ color = 'positive';
+ name = 'checkCircle';
+ } else if (
+ test.testResult &&
+ test.testResult.toLowerCase() === 'fail'
+ ) {
+ name = 'exclamationTriangleFull';
+ }
+ return (
+ <li type="none" key={index}>
+ <SVGIcon
+ color={color}
+ name={name}
+ labelPosition="right"
+ />
+ <span className="validation-results-test-result-label">
+ {test.testName +
+ ' | ' +
+ test.testResult +
+ ' | ' +
+ test.notes}
+ </span>
+ </li>
+ );
+ })}
+ </div>
+ );
+};
+
+class SoftwareProductValidationResultsView extends React.Component {
+ static propTypes = {
+ softwareProductValidation: PropTypes.object
+ };
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ vspId: this.props.softwareProductId,
+ versionNumber: this.props.version.name
+ };
+ }
+
+ buildSubAccordions(result) {
+ if (result.status && result.status.toLowerCase() === 'completed') {
+ if (!result.results.testResults) {
+ return (
+ <div
+ title={i18n('Scenario: {scenario} | Status: {status}', {
+ scenario: result.scenario,
+ status: result.status
+ })}>
+ <SVGIcon
+ color="negative"
+ name="errorCircle"
+ labelPosition="right"
+ />
+ <span className="validation-results-test-result-label">
+ {i18n('{title} results are not available', {
+ title: result.scenario
+ })}
+ </span>
+ </div>
+ );
+ }
+ return (
+ <Accordion
+ dataTestId="vsp-validation-test-result-success"
+ title={i18n('Scenario: {scenario} | Status: {status}', {
+ scenario: result.scenario,
+ status: result.status
+ })}>
+ {Object.keys(result.results.testResults).map(
+ (key, index) => {
+ let title = unCamelCasedString(key);
+ if (result.results.testResults[key].length > 0) {
+ return (
+ <Accordion
+ dataTestId={title}
+ title={title}
+ key={index}>
+ <TestResultComponent
+ tests={
+ result.results.testResults[key]
+ }
+ />
+ </Accordion>
+ );
+ } else {
+ return (
+ <div>
+ {i18n(
+ '{title} results are not available',
+ {
+ title: title
+ }
+ )}
+ </div>
+ );
+ }
+ }
+ )}
+ </Accordion>
+ );
+ } else if (
+ result.status &&
+ result.status.toLowerCase() === 'failed' &&
+ result.results.errors
+ ) {
+ return (
+ <Accordion
+ dataTestId="vsp-validation-test-result-success"
+ title={i18n('Scenario: {scenario} | Status: {status}', {
+ scenario: result.scenario,
+ status: result.status
+ })}>
+ {result.results.errors.map((element, index) => {
+ return (
+ <li type="none" key={index}>
+ <SVGIcon
+ color="negative"
+ name="errorCircle"
+ labelPosition="right"
+ />
+ <span className="validation-results-test-result-label">
+ {element.reason + ' | ' + element.advice}
+ </span>
+ </li>
+ );
+ })}
+ </Accordion>
+ );
+ } else if (result.message || result.httpStatus) {
+ return (
+ <div>
+ <SVGIcon
+ color="negative"
+ name="errorCircle"
+ labelPosition="right"
+ />
+ <span className="validation-results-test-result-label">
+ {result.message + ' | ' + result.httpStatus}
+ </span>
+ </div>
+ );
+ }
+ }
+
+ render() {
+ let results = this.props.softwareProductValidation.vspTestResults || [];
+ if (results.length > 0) {
+ return (
+ <GridSection title={i18n('Validation Results')}>
+ <GridItem colSpan={10}>
+ <Accordion
+ defaultExpanded
+ dataTestId="vsp-validation-test-result"
+ title={i18n('Test Results')}>
+ {results.map(row => this.buildSubAccordions(row))}
+ </Accordion>
+ </GridItem>
+ </GridSection>
+ );
+ } else {
+ return (
+ <GridSection title={i18n('Validation Results')}>
+ <h4>{i18n('No Validation Checks Performed')}</h4>
+ </GridSection>
+ );
+ }
+ }
+}
+
+export default SoftwareProductValidationResultsView;