Browse Source

SONAR-21798 Portfolio reflects Software Qualities

tags/10.5.0.89998
Ismail Cherri 2 months ago
parent
commit
15364b9623

+ 8
- 8
server/sonar-web/src/main/js/apps/code/__tests__/Code-it.ts View File

let child1Row = ui.measureRow(/^Child 1/); let child1Row = ui.measureRow(/^Child 1/);
[ [
['Releasability', 'OK'], ['Releasability', 'OK'],
['security', 'C'],
['Reliability', 'C'], ['Reliability', 'C'],
['vulnerabilities', 'C'],
['security_hotspots', 'C'],
['Maintainability', 'C'], ['Maintainability', 'C'],
['security_review', 'C'],
['ncloc', '3'], ['ncloc', '3'],
['last_analysis_date', '2022-02-01'], ['last_analysis_date', '2022-02-01'],
].forEach(([domain, value]) => { ].forEach(([domain, value]) => {
let child2Row = ui.measureRow(/^Child 2/); let child2Row = ui.measureRow(/^Child 2/);
[ [
['Releasability', 'ERROR'], ['Releasability', 'ERROR'],
['security', '—'],
['Reliability', '—'], ['Reliability', '—'],
['vulnerabilities', '—'],
['security_hotspots', '—'],
['Maintainability', '—'], ['Maintainability', '—'],
['security_review', '—'],
['ncloc', '—'], ['ncloc', '—'],
['last_analysis_date', '—'], ['last_analysis_date', '—'],
].forEach(([domain, value]) => { ].forEach(([domain, value]) => {
child1Row = ui.measureRow(/^Child 1/); child1Row = ui.measureRow(/^Child 1/);
[ [
['Releasability', 'OK'], ['Releasability', 'OK'],
['security', 'B'],
['Reliability', 'B'], ['Reliability', 'B'],
['vulnerabilities', 'B'],
['security_hotspots', 'B'],
['Maintainability', 'B'], ['Maintainability', 'B'],
['security_review', 'B'],
['ncloc', '2'], ['ncloc', '2'],
].forEach(([domain, value]) => { ].forEach(([domain, value]) => {
expect(ui.measureValueCell(child1Row, domain, value)).toBeInTheDocument(); expect(ui.measureValueCell(child1Row, domain, value)).toBeInTheDocument();
child2Row = ui.measureRow(/^Child 2/); child2Row = ui.measureRow(/^Child 2/);
[ [
['Releasability', 'ERROR'], ['Releasability', 'ERROR'],
['security', '—'],
['Reliability', '—'], ['Reliability', '—'],
['vulnerabilities', '—'],
['security_hotspots', '—'],
['Maintainability', '—'], ['Maintainability', '—'],
['security_review', '—'],
['ncloc', '—'], ['ncloc', '—'],
].forEach(([domain, value]) => { ].forEach(([domain, value]) => {
expect(ui.measureValueCell(child2Row, domain, value)).toBeInTheDocument(); expect(ui.measureValueCell(child2Row, domain, value)).toBeInTheDocument();

+ 12
- 12
server/sonar-web/src/main/js/apps/code/__tests__/__snapshots__/utils-test.tsx.snap View File

exports[`getCodeMetrics should return the right metrics for portfolios 1`] = ` exports[`getCodeMetrics should return the right metrics for portfolios 1`] = `
[ [
"releasability_rating", "releasability_rating",
"new_reliability_rating",
"new_security_rating", "new_security_rating",
"new_security_review_rating",
"new_reliability_rating",
"new_maintainability_rating", "new_maintainability_rating",
"new_security_review_rating",
"new_lines", "new_lines",
"releasability_rating", "releasability_rating",
"reliability_rating",
"security_rating", "security_rating",
"security_review_rating",
"reliability_rating",
"sqale_rating", "sqale_rating",
"security_review_rating",
"ncloc", "ncloc",
] ]
`; `;
exports[`getCodeMetrics should return the right metrics for portfolios 2`] = ` exports[`getCodeMetrics should return the right metrics for portfolios 2`] = `
[ [
"releasability_rating", "releasability_rating",
"new_reliability_rating",
"new_security_rating", "new_security_rating",
"new_security_review_rating",
"new_reliability_rating",
"new_maintainability_rating", "new_maintainability_rating",
"new_security_review_rating",
"new_lines", "new_lines",
"releasability_rating", "releasability_rating",
"reliability_rating",
"security_rating", "security_rating",
"security_review_rating",
"reliability_rating",
"sqale_rating", "sqale_rating",
"security_review_rating",
"ncloc", "ncloc",
"alert_status", "alert_status",
] ]
exports[`getCodeMetrics should return the right metrics for portfolios 3`] = ` exports[`getCodeMetrics should return the right metrics for portfolios 3`] = `
[ [
"releasability_rating", "releasability_rating",
"new_reliability_rating",
"new_security_rating", "new_security_rating",
"new_security_review_rating",
"new_reliability_rating",
"new_maintainability_rating", "new_maintainability_rating",
"new_security_review_rating",
"new_lines", "new_lines",
"alert_status", "alert_status",
] ]
exports[`getCodeMetrics should return the right metrics for portfolios 4`] = ` exports[`getCodeMetrics should return the right metrics for portfolios 4`] = `
[ [
"releasability_rating", "releasability_rating",
"reliability_rating",
"security_rating", "security_rating",
"security_review_rating",
"reliability_rating",
"sqale_rating", "sqale_rating",
"security_review_rating",
"ncloc", "ncloc",
"alert_status", "alert_status",
] ]

+ 1
- 1
server/sonar-web/src/main/js/apps/code/components/CodeAppRenderer.tsx View File

handleSelectNewCode: (newCodeSelected: boolean) => void; handleSelectNewCode: (newCodeSelected: boolean) => void;
} }


export default function CodeAppRenderer(props: Props) {
export default function CodeAppRenderer(props: Readonly<Props>) {
const { const {
branchLike, branchLike,
component, component,

+ 2
- 2
server/sonar-web/src/main/js/apps/code/components/ComponentsHeader.tsx View File

if (isPortfolio) { if (isPortfolio) {
columns = [ columns = [
translate('metric_domain.Releasability'), translate('metric_domain.Releasability'),
translate('portfolio.metric_domain.security'),
translate('metric_domain.Reliability'), translate('metric_domain.Reliability'),
translate('portfolio.metric_domain.vulnerabilities'),
translate('portfolio.metric_domain.security_hotspots'),
translate('metric_domain.Maintainability'), translate('metric_domain.Maintainability'),
translate('portfolio.metric_domain.security_review'),
translate('metric.ncloc.name'), translate('metric.ncloc.name'),
]; ];



+ 4
- 4
server/sonar-web/src/main/js/apps/code/utils.ts View File



const PORTFOLIO_METRICS = [ const PORTFOLIO_METRICS = [
MetricKey.releasability_rating, MetricKey.releasability_rating,
MetricKey.reliability_rating,
MetricKey.security_rating, MetricKey.security_rating,
MetricKey.security_review_rating,
MetricKey.reliability_rating,
MetricKey.sqale_rating, MetricKey.sqale_rating,
MetricKey.security_review_rating,
MetricKey.ncloc, MetricKey.ncloc,
]; ];


const NEW_PORTFOLIO_METRICS = [ const NEW_PORTFOLIO_METRICS = [
MetricKey.releasability_rating, MetricKey.releasability_rating,
MetricKey.new_reliability_rating,
MetricKey.new_security_rating, MetricKey.new_security_rating,
MetricKey.new_security_review_rating,
MetricKey.new_reliability_rating,
MetricKey.new_maintainability_rating, MetricKey.new_maintainability_rating,
MetricKey.new_security_review_rating,
MetricKey.new_lines, MetricKey.new_lines,
]; ];



+ 5
- 0
server/sonar-web/src/main/js/components/shared/AnalysisMissingInfoMessage.tsx View File

import * as React from 'react'; import * as React from 'react';
import { FormattedMessage, useIntl } from 'react-intl'; import { FormattedMessage, useIntl } from 'react-intl';
import DocumentationLink from '../common/DocumentationLink'; import DocumentationLink from '../common/DocumentationLink';
import { ComponentQualifier } from '../../types/component';


interface AnalysisMissingInfoMessageProps { interface AnalysisMissingInfoMessageProps {
qualifier: string; qualifier: string;
}: Readonly<AnalysisMissingInfoMessageProps>) { }: Readonly<AnalysisMissingInfoMessageProps>) {
const intl = useIntl(); const intl = useIntl();


if (qualifier === ComponentQualifier.Portfolio) {
return null;
}

return ( return (
<FlagMessage variant="info" className={className}> <FlagMessage variant="info" className={className}>
<FormattedMessage <FormattedMessage

+ 2
- 2
sonar-core/src/main/resources/org/sonar/l10n/core.properties View File

portfolio.number_of_projects=Number of project branches portfolio.number_of_projects=Number of project branches
portfolio.number_of_lines=Number of lines of code portfolio.number_of_lines=Number of lines of code


portfolio.metric_domain.vulnerabilities=Security Vulnerabilities
portfolio.metric_domain.security_hotspots=Security Review
portfolio.metric_domain.security=Security
portfolio.metric_domain.security_review=Security Review


#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# #

Loading…
Cancel
Save