/**
* 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 (
{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 (
{test.testName +
' | ' +
test.testResult +
' | ' +
test.notes}
);
})}
);
};
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
};
}
getTitle(result) {
let { vspTestsMap } = this.props.softwareProductValidation;
let title = vspTestsMap[result.testCaseName]
? vspTestsMap[result.testCaseName].title
: i18n('Unknown');
return i18n(
'Scenario: {scenario} | Title: {title} | Test Case: {testCaseName} | Status: {status}',
{
scenario: result.scenario || i18n('Unknown'),
status: result.status || i18n('Unknown'),
testCaseName: result.testCaseName || i18n('Unknown'),
title: title
}
);
}
renderJSON(result) {
return (
);
}
renderError(result) {
if (Array.isArray(result)) {
return result.map((parameter, index) => {
return (
{(parameter.code || '') +
' | ' +
(parameter.advice || parameter.message)}
);
});
} else {
return (
{(result.code || '') +
' | ' +
(result.advice || result.message)}
);
}
}
renderResults(result) {
if (typeof result === 'string' || result instanceof String) {
return (
{result}
);
}
return Object.keys(result).map((key, index) => {
let title = unCamelCasedString(key);
if (
typeof result[key] === 'string' ||
result[key] instanceof String
) {
return (
{this.renderString(result[key])}
);
} else if (Array.isArray(result[key])) {
if (result[key].length > 0) {
return (
);
} else {
return (
{i18n('{title} results are not available', {
title: title
})}
);
}
} else {
return (
{this.renderJSON(result[key])}
);
}
});
}
renderString(result) {
return (
);
}
buildSubAccordions(result) {
let results = result.results;
if (!results) {
return (
{this.renderJSON(result)}
);
} else if (typeof results === 'string' || results instanceof String) {
return (
{this.renderString(results)}
);
} else {
return (
{Object.keys(results).length === 0
? this.renderString(
i18n('{title} results are not available', {
title: 'Test'
})
)
: Object.keys(results).map(key => {
if (key === 'errors' || key === 'error') {
return this.renderError(results[key]);
} else if (key === 'testResults') {
return this.renderResults(results[key]);
} else {
let title = unCamelCasedString(key);
if (results[key] instanceof Object) {
return (
{this.renderJSON(results[key])}
);
} else {
return (
{this.renderString(results[key])}
);
}
}
})}
);
}
}
render() {
let results = this.props.softwareProductValidation.vspTestResults || [];
if (results.length > 0) {
return (
{results.map(row => this.buildSubAccordions(row))}
);
} else {
return (
{i18n('No Validation Checks Performed')}
);
}
}
}
export default SoftwareProductValidationResultsView;