Commit 45bd054f authored by Filipa Lacerda's avatar Filipa Lacerda

Merge branch '6079-ignore-dismissed-issues-in-count' into 'master'

Make wording in security report summaries more consistent

Closes #7383

See merge request gitlab-org/gitlab-ee!7373
parents 6ff23241 a3dd88cd
...@@ -3,12 +3,14 @@ import { mapState } from 'vuex'; ...@@ -3,12 +3,14 @@ import { mapState } from 'vuex';
import $ from 'jquery'; import $ from 'jquery';
import { n__, s__ } from '~/locale'; import { n__, s__ } from '~/locale';
import CiIcon from '~/vue_shared/components/ci_icon.vue'; import CiIcon from '~/vue_shared/components/ci_icon.vue';
import messages from 'ee/vue_shared/security_reports/store/messages';
export default { export default {
name: 'SummaryReport', name: 'SummaryReport',
components: { components: {
CiIcon, CiIcon,
}, },
messages,
computed: { computed: {
...mapState(['sast', 'dependencyScanning', 'dast', 'sastContainer']), ...mapState(['sast', 'dependencyScanning', 'dast', 'sastContainer']),
sastLink() { sastLink() {
...@@ -123,10 +125,10 @@ export default { ...@@ -123,10 +125,10 @@ export default {
class="prepend-left-10 flex flex-align-self-center" class="prepend-left-10 flex flex-align-self-center"
> >
<template v-if="hasSastError"> <template v-if="hasSastError">
{{ s__('ciReport|SAST resulted in error while loading results') }} {{ $options.messages.SAST_HAS_ERROR }}
</template> </template>
<template v-else-if="isLoadingSast"> <template v-else-if="isLoadingSast">
{{ s__('ciReport|SAST is loading') }} {{ $options.messages.SAST_IS_LOADING }}
</template> </template>
<template v-else> <template v-else>
{{ s__('ciReport|SAST detected') }} {{ s__('ciReport|SAST detected') }}
...@@ -157,10 +159,10 @@ export default { ...@@ -157,10 +159,10 @@ export default {
class="prepend-left-10 flex flex-align-self-center" class="prepend-left-10 flex flex-align-self-center"
> >
<template v-if="hasDependencyScanningError"> <template v-if="hasDependencyScanningError">
{{ s__('ciReport|Dependency scanning resulted in error while loading results') }} {{ $options.messages.DEPENDENCY_SCANNING_HAS_ERROR }}
</template> </template>
<template v-else-if="isLoadingDependencyScanning"> <template v-else-if="isLoadingDependencyScanning">
{{ s__('ciReport|Dependency scanning is loading') }} {{ $options.messages.DEPENDENCY_SCANNING_IS_LOADING }}
</template> </template>
<template v-else> <template v-else>
{{ s__('ciReport|Dependency scanning detected') }} {{ s__('ciReport|Dependency scanning detected') }}
...@@ -191,10 +193,10 @@ export default { ...@@ -191,10 +193,10 @@ export default {
class="prepend-left-10 flex flex-align-self-center" class="prepend-left-10 flex flex-align-self-center"
> >
<template v-if="hasSastContainerError"> <template v-if="hasSastContainerError">
{{ s__('ciReport|Container scanning resulted in error while loading results') }} {{ $options.messages.CONTAINER_SCANNING_HAS_ERROR }}
</template> </template>
<template v-else-if="isLoadingSastContainer"> <template v-else-if="isLoadingSastContainer">
{{ s__('ciReport|Container scanning is loading') }} {{ $options.messages.CONTAINER_SCANNING_IS_LOADING }}
</template> </template>
<template v-else> <template v-else>
{{ s__('ciReport|Container scanning detected') }} {{ s__('ciReport|Container scanning detected') }}
...@@ -225,10 +227,10 @@ export default { ...@@ -225,10 +227,10 @@ export default {
class="prepend-left-10 flex flex-align-self-center" class="prepend-left-10 flex flex-align-self-center"
> >
<template v-if="hasDastError"> <template v-if="hasDastError">
{{ s__('ciReport|DAST resulted in error while loading results') }} {{ $options.messages.DAST_HAS_ERROR }}
</template> </template>
<template v-else-if="isLoadingDast"> <template v-else-if="isLoadingDast">
{{ s__('ciReport|DAST is loading') }} {{ $options.messages.DAST_IS_LOADING }}
</template> </template>
<template v-else> <template v-else>
{{ s__('ciReport|DAST detected') }} {{ s__('ciReport|DAST detected') }}
......
...@@ -7,12 +7,14 @@ import { componentNames } from 'ee/vue_shared/components/reports/issue_body'; ...@@ -7,12 +7,14 @@ import { componentNames } from 'ee/vue_shared/components/reports/issue_body';
import IssueModal from './components/modal.vue'; import IssueModal from './components/modal.vue';
import mixin from './mixins/security_report_mixin'; import mixin from './mixins/security_report_mixin';
import reportsMixin from './mixins/reports_mixin'; import reportsMixin from './mixins/reports_mixin';
import messages from './store/messages';
export default { export default {
components: { components: {
ReportSection, ReportSection,
IssueModal, IssueModal,
}, },
messages,
mixins: [mixin, reportsMixin], mixins: [mixin, reportsMixin],
props: { props: {
alwaysOpen: { alwaysOpen: {
...@@ -93,22 +95,25 @@ export default { ...@@ -93,22 +95,25 @@ export default {
...mapState(['sast', 'dependencyScanning', 'sastContainer', 'dast']), ...mapState(['sast', 'dependencyScanning', 'sastContainer', 'dast']),
sastText() { sastText() {
return this.summaryTextBuilder('SAST', this.sast.newIssues.length); return this.summaryTextBuilder(messages.SAST, this.sast.newIssues.length);
}, },
dependencyScanningText() { dependencyScanningText() {
return this.summaryTextBuilder( return this.summaryTextBuilder(
'Dependency scanning', messages.DEPENDENCY_SCANNING,
this.dependencyScanning.newIssues.length, this.dependencyScanning.newIssues.length,
); );
}, },
sastContainerText() { sastContainerText() {
return this.summaryTextBuilder('Container scanning', this.sastContainer.newIssues.length); return this.summaryTextBuilder(
messages.CONTAINER_SCANNING,
this.sastContainer.newIssues.length,
);
}, },
dastText() { dastText() {
return this.summaryTextBuilder('DAST', this.dast.newIssues.length); return this.summaryTextBuilder(messages.DAST, this.dast.newIssues.length);
}, },
issuesCount() { issuesCount() {
...@@ -184,27 +189,21 @@ export default { ...@@ -184,27 +189,21 @@ export default {
'setCanCreateIssuePermission', 'setCanCreateIssuePermission',
'setCanCreateFeedbackPermission', 'setCanCreateFeedbackPermission',
]), ]),
summaryTextBuilder(type, issuesCount = 0) { summaryTextBuilder(reportType, issuesCount = 0) {
if (issuesCount === 0) { if (issuesCount === 0) {
return sprintf(s__('ciReport|%{type} detected no vulnerabilities'), { return sprintf(s__('ciReport|%{reportType} detected no vulnerabilities'), {
type, reportType,
}); });
} }
return sprintf( return sprintf(
n__('%{type} detected 1 vulnerability', '%{type} detected %{vulnerabilityCount} vulnerabilities', issuesCount), n__(
{ type, vulnerabilityCount: issuesCount }, 'ciReport|%{reportType} detected %{vulnerabilityCount} vulnerability',
'ciReport|%{reportType} detected %{vulnerabilityCount} vulnerabilities',
issuesCount,
),
{ reportType, vulnerabilityCount: issuesCount },
); );
}, },
translateText(type) {
return {
error: sprintf(s__('ciReport|%{reportName} resulted in error while loading results'), {
reportName: type,
}),
loading: sprintf(s__('ciReport|%{reportName} is loading'), {
reportName: type,
}),
};
},
}, },
}; };
</script> </script>
...@@ -215,8 +214,8 @@ export default { ...@@ -215,8 +214,8 @@ export default {
:always-open="alwaysOpen" :always-open="alwaysOpen"
:component="$options.componentNames.SastIssueBody" :component="$options.componentNames.SastIssueBody"
:status="checkReportStatus(sast.isLoading, sast.hasError)" :status="checkReportStatus(sast.isLoading, sast.hasError)"
:loading-text="translateText('SAST').loading" :loading-text="$options.messages.SAST_IS_LOADING"
:error-text="translateText('SAST').error" :error-text="$options.messages.SAST_HAS_ERROR"
:success-text="sastText" :success-text="sastText"
:unresolved-issues="sast.newIssues" :unresolved-issues="sast.newIssues"
:has-issues="sast.newIssues.length > 0" :has-issues="sast.newIssues.length > 0"
...@@ -229,8 +228,8 @@ export default { ...@@ -229,8 +228,8 @@ export default {
:always-open="alwaysOpen" :always-open="alwaysOpen"
:component="$options.componentNames.SastIssueBody" :component="$options.componentNames.SastIssueBody"
:status="checkReportStatus(dependencyScanning.isLoading, dependencyScanning.hasError)" :status="checkReportStatus(dependencyScanning.isLoading, dependencyScanning.hasError)"
:loading-text="translateText('Dependency scanning').loading" :loading-text="$options.messages.DEPENDENCY_SCANNING_IS_LOADING"
:error-text="translateText('Dependency scanning').error" :error-text="$options.messages.DEPENDENCY_SCANNING_HAS_ERROR"
:success-text="dependencyScanningText" :success-text="dependencyScanningText"
:unresolved-issues="dependencyScanning.newIssues" :unresolved-issues="dependencyScanning.newIssues"
:has-issues="dependencyScanning.newIssues.length > 0" :has-issues="dependencyScanning.newIssues.length > 0"
...@@ -243,8 +242,8 @@ export default { ...@@ -243,8 +242,8 @@ export default {
:always-open="alwaysOpen" :always-open="alwaysOpen"
:component="$options.componentNames.SastContainerIssueBody" :component="$options.componentNames.SastContainerIssueBody"
:status="checkReportStatus(sastContainer.isLoading, sastContainer.hasError)" :status="checkReportStatus(sastContainer.isLoading, sastContainer.hasError)"
:loading-text="translateText('Container scanning').loading" :loading-text="$options.messages.CONTAINER_SCANNING_IS_LOADING"
:error-text="translateText('Container scanning').error" :error-text="$options.messages.CONTAINER_SCANNING_HAS_ERROR"
:success-text="sastContainerText" :success-text="sastContainerText"
:unresolved-issues="sastContainer.newIssues" :unresolved-issues="sastContainer.newIssues"
:has-issues="sastContainer.newIssues.length > 0" :has-issues="sastContainer.newIssues.length > 0"
...@@ -257,8 +256,8 @@ export default { ...@@ -257,8 +256,8 @@ export default {
:always-open="alwaysOpen" :always-open="alwaysOpen"
:component="$options.componentNames.DastIssueBody" :component="$options.componentNames.DastIssueBody"
:status="checkReportStatus(dast.isLoading, dast.hasError)" :status="checkReportStatus(dast.isLoading, dast.hasError)"
:loading-text="translateText('DAST').loading" :loading-text="$options.messages.DAST_IS_LOADING"
:error-text="translateText('DAST').error" :error-text="$options.messages.DAST_HAS_ERROR"
:success-text="dastText" :success-text="dastText"
:unresolved-issues="dast.newIssues" :unresolved-issues="dast.newIssues"
:has-issues="dast.newIssues.length > 0" :has-issues="dast.newIssues.length > 0"
......
export const SAST = 'SAST';
export const DAST = 'DAST';
export const SAST_CONTAINER = 'SAST_CONTAINER';
export const LOADING = 'LOADING'; export const LOADING = 'LOADING';
export const ERROR = 'ERROR'; export const ERROR = 'ERROR';
export const SUCCESS = 'SUCCESS'; export const SUCCESS = 'SUCCESS';
import { n__, s__ } from '~/locale'; import { s__, sprintf } from '~/locale';
import { textBuilder, statusIcon } from './utils'; import { groupedTextBuilder, statusIcon } from './utils';
import { LOADING, ERROR, SUCCESS } from './constants'; import { LOADING, ERROR, SUCCESS } from './constants';
import messages from './messages';
export const groupedSastText = ({ sast }) => { const groupedReportText = (report, name, errorMessage, loadingMessage) => {
if (sast.hasError) { if (report.hasError) {
return s__('ciReport|SAST resulted in error while loading results'); return errorMessage;
} }
if (sast.isLoading) { if (report.isLoading) {
return s__('ciReport|SAST is loading'); return loadingMessage;
} }
return textBuilder( return groupedTextBuilder(
'SAST', name,
sast.paths, report.paths,
sast.newIssues.length, (report.newIssues || []).length,
sast.resolvedIssues.length, (report.resolvedIssues || []).length,
sast.allIssues.length, (report.allIssues || []).length,
); );
}; };
export const groupedSastContainerText = ({ sastContainer }) => { export const groupedSastText = ({ sast }) =>
if (sastContainer.hasError) { groupedReportText(sast, messages.SAST, messages.SAST_HAS_ERROR, messages.SAST_IS_LOADING);
return s__('ciReport|Container scanning resulted in error while loading results');
}
if (sastContainer.isLoading) {
return s__('ciReport|Container scanning is loading');
}
return textBuilder( export const groupedSastContainerText = ({ sastContainer }) =>
'Container scanning', groupedReportText(
sastContainer.paths, sastContainer,
sastContainer.newIssues.length, messages.CONTAINER_SCANNING,
sastContainer.resolvedIssues.length, messages.CONTAINER_SCANNING_HAS_ERROR,
messages.CONTAINER_SCANNING_IS_LOADING,
); );
};
export const groupedDastText = ({ dast }) => {
if (dast.hasError) {
return s__('ciReport|DAST resulted in error while loading results');
}
if (dast.isLoading) {
return s__('ciReport|DAST is loading');
}
return textBuilder('DAST', dast.paths, dast.newIssues.length, dast.resolvedIssues.length);
};
export const groupedDependencyText = ({ dependencyScanning }) => {
if (dependencyScanning.hasError) {
return s__('ciReport|Dependency scanning resulted in error while loading results');
}
if (dependencyScanning.isLoading) { export const groupedDastText = ({ dast }) =>
return s__('ciReport|Dependency scanning is loading'); groupedReportText(dast, messages.DAST, messages.DAST_HAS_ERROR, messages.DAST_IS_LOADING);
}
return textBuilder( export const groupedDependencyText = ({ dependencyScanning }) =>
'Dependency scanning', groupedReportText(
dependencyScanning.paths, dependencyScanning,
dependencyScanning.newIssues.length, messages.DEPENDENCY_SCANNING,
dependencyScanning.resolvedIssues.length, messages.DEPENDENCY_SCANNING_HAS_ERROR,
dependencyScanning.allIssues.length, messages.DEPENDENCY_SCANNING_IS_LOADING,
); );
};
export const groupedSummaryText = (state, getters) => { export const groupedSummaryText = (state, getters) => {
const { added, fixed } = state.summaryCounts; const reportType = s__('ciReport|Security scanning');
// All reports are loading // All reports are loading
if (getters.areAllReportsLoading) { if (getters.areAllReportsLoading) {
return s__('ciReport|Security scanning is loading'); return sprintf(messages.TRANSLATION_IS_LOADING, { reportType });
} }
// All reports returned error // All reports returned error
...@@ -80,53 +56,25 @@ export const groupedSummaryText = (state, getters) => { ...@@ -80,53 +56,25 @@ export const groupedSummaryText = (state, getters) => {
return s__('ciReport|Security scanning failed loading any results'); return s__('ciReport|Security scanning failed loading any results');
} }
// No base is present in any report const { added, fixed, existing } = state.summaryCounts;
if (getters.noBaseInAllReports) {
if (added > 0) {
return n__(
'Security scanning detected %d vulnerability for the source branch only',
'Security scanning detected %d vulnerabilities for the source branch only',
added,
);
}
return s__(
'Security scanning detected no vulnerabilities for the source branch only',
);
}
const text = [s__('ciReport|Security scanning')]; let status = '';
if (getters.areReportsLoading && getters.anyReportHasError) { if (getters.areReportsLoading && getters.anyReportHasError) {
text.push('(is loading, errors when loading results)'); status = s__('ciReport|(is loading, errors when loading results)');
} else if (getters.areReportsLoading && !getters.anyReportHasError) { } else if (getters.areReportsLoading && !getters.anyReportHasError) {
text.push('(is loading)'); status = s__('ciReport|(is loading)');
} else if (!getters.areReportsLoading && getters.anyReportHasError) { } else if (!getters.areReportsLoading && getters.anyReportHasError) {
text.push('(errors when loading results)'); status = s__('ciReport|(errors when loading results)');
} }
if (added > 0 && fixed === 0) { /*
text.push(n__('detected %d new vulnerability', 'detected %d new vulnerabilities', added)); In order to correct wording, we ne to set the base property to true,
} if at least one report has a base.
*/
const paths = { head: true, base: !getters.noBaseInAllReports };
if (added > 0 && fixed > 0) { return groupedTextBuilder(reportType, paths, added, fixed, existing, status);
text.push(
`${n__('detected %d new vulnerability', 'detected %d new vulnerabilities', added)} ${n__(
'and %d fixed vulnerability',
'and %d fixed vulnerabilities',
fixed,
)}`,
);
}
if (added === 0 && fixed > 0) {
text.push(n__('detected %d fixed vulnerability', 'detected %d fixed vulnerabilities', fixed));
}
if (added === 0 && fixed === 0) {
text.push(s__('detected no vulnerabilities'));
}
return text.join(' ');
}; };
export const summaryStatus = (state, getters) => { export const summaryStatus = (state, getters) => {
......
import { s__, sprintf } from '~/locale';
const TRANSLATION_IS_LOADING = s__('ciReport|%{reportType} is loading');
const TRANSLATION_HAS_ERROR = s__('ciReport|%{reportType}: Loading resulted in an error');
const SAST = s__('ciReport|SAST');
const DAST = s__('ciReport|DAST');
const CONTAINER_SCANNING = s__('ciReport|Container scanning');
const DEPENDENCY_SCANNING = s__('ciReport|Dependency scanning');
export default {
SAST,
DAST,
CONTAINER_SCANNING,
DEPENDENCY_SCANNING,
TRANSLATION_IS_LOADING,
TRANSLATION_HAS_ERROR,
SAST_IS_LOADING: sprintf(TRANSLATION_IS_LOADING, { reportType: SAST }),
SAST_HAS_ERROR: sprintf(TRANSLATION_HAS_ERROR, { reportType: SAST }),
DAST_IS_LOADING: sprintf(TRANSLATION_IS_LOADING, { reportType: DAST }),
DAST_HAS_ERROR: sprintf(TRANSLATION_HAS_ERROR, { reportType: DAST }),
CONTAINER_SCANNING_IS_LOADING: sprintf(TRANSLATION_IS_LOADING, {
reportType: CONTAINER_SCANNING,
}),
CONTAINER_SCANNING_HAS_ERROR: sprintf(TRANSLATION_HAS_ERROR, { reportType: CONTAINER_SCANNING }),
DEPENDENCY_SCANNING_IS_LOADING: sprintf(TRANSLATION_IS_LOADING, {
reportType: DEPENDENCY_SCANNING,
}),
DEPENDENCY_SCANNING_HAS_ERROR: sprintf(TRANSLATION_HAS_ERROR, {
reportType: DEPENDENCY_SCANNING,
}),
};
...@@ -84,6 +84,7 @@ export default { ...@@ -84,6 +84,7 @@ export default {
state.summaryCounts.added += newIssues.length; state.summaryCounts.added += newIssues.length;
state.summaryCounts.fixed += resolvedIssues.length; state.summaryCounts.fixed += resolvedIssues.length;
state.summaryCounts.existing += allIssues.length;
} else if (reports.head && !reports.base) { } else if (reports.head && !reports.base) {
const newIssues = parseSastIssues(reports.head, reports.enrichData, state.blobPath.head); const newIssues = parseSastIssues(reports.head, reports.enrichData, state.blobPath.head);
...@@ -179,8 +180,8 @@ export default { ...@@ -179,8 +180,8 @@ export default {
Vue.set(state.dast, 'newIssues', newIssues); Vue.set(state.dast, 'newIssues', newIssues);
Vue.set(state.dast, 'resolvedIssues', resolvedIssues); Vue.set(state.dast, 'resolvedIssues', resolvedIssues);
Vue.set(state.dast, 'isLoading', false); Vue.set(state.dast, 'isLoading', false);
state.summaryCounts.added += newIssues.length;
state.summaryCounts.added += newIssues.length;
state.summaryCounts.fixed += resolvedIssues.length; state.summaryCounts.fixed += resolvedIssues.length;
} else if (reports.head && reports.head.site && !reports.base) { } else if (reports.head && reports.head.site && !reports.base) {
const newIssues = parseDastIssues(reports.head.site.alerts, reports.enrichData); const newIssues = parseDastIssues(reports.head.site.alerts, reports.enrichData);
...@@ -245,6 +246,7 @@ export default { ...@@ -245,6 +246,7 @@ export default {
state.summaryCounts.added += newIssues.length; state.summaryCounts.added += newIssues.length;
state.summaryCounts.fixed += resolvedIssues.length; state.summaryCounts.fixed += resolvedIssues.length;
state.summaryCounts.existing += allIssues.length;
} }
if (reports.head && !reports.base) { if (reports.head && !reports.base) {
......
...@@ -4,6 +4,7 @@ export default () => ({ ...@@ -4,6 +4,7 @@ export default () => ({
summaryCounts: { summaryCounts: {
added: 0, added: 0,
fixed: 0, fixed: 0,
existing: 0,
}, },
blobPath: { blobPath: {
......
...@@ -252,75 +252,62 @@ export const filterByKey = (firstArray = [], secondArray = [], key = '') => ...@@ -252,75 +252,62 @@ export const filterByKey = (firstArray = [], secondArray = [], key = '') =>
export const getUnapprovedVulnerabilities = (issues = [], unapproved = []) => export const getUnapprovedVulnerabilities = (issues = [], unapproved = []) =>
issues.filter(item => unapproved.find(el => el === item.vulnerability)); issues.filter(item => unapproved.find(el => el === item.vulnerability));
export const textBuilder = ( export const groupedTextBuilder = (
type = '', reportType = '',
paths = {}, paths = {},
newIssues = 0, newIssues = 0,
resolvedIssues = 0, resolvedIssues = 0,
allIssues = 0, allIssues = 0,
status = '',
) => { ) => {
// with no new or fixed but with vulnerabilities let baseString = '';
if (newIssues === 0 && resolvedIssues === 0 && allIssues) {
return sprintf(s__('ciReport|%{type} detected no new security vulnerabilities'), { type });
}
if (!paths.base) { if (!paths.base) {
if (newIssues > 0) { if (newIssues > 0) {
return sprintf( baseString = n__(
n__( 'ciReport|%{reportType} %{status} detected %{newCount} vulnerability for the source branch only',
'%{type} detected 1 vulnerability for the source branch only', 'ciReport|%{reportType} %{status} detected %{newCount} vulnerabilities for the source branch only',
'%{type} detected %{vulnerabilityCount} vulnerabilities for the source branch only', newIssues,
newIssues,
),
{ type, vulnerabilityCount: newIssues },
); );
} } else {
baseString = s__(
return sprintf('%{type} detected no vulnerabilities for the source branch only', { type }); 'ciReport|%{reportType} %{status} detected no vulnerabilities for the source branch only',
} else if (paths.base && paths.head) {
// With no issues
if (newIssues === 0 && resolvedIssues === 0 && allIssues === 0) {
return sprintf(s__('ciReport|%{type} detected no security vulnerabilities'), { type });
}
// with only new issues
if (newIssues > 0 && resolvedIssues === 0) {
return sprintf(
n__(
'%{type} detected 1 new vulnerability',
'%{type} detected %{vulnerabilityCount} new vulnerabilities',
newIssues,
),
{ type, vulnerabilityCount: newIssues },
); );
} }
} else if (paths.base && paths.head) {
// with new and fixed issues
if (newIssues > 0 && resolvedIssues > 0) { if (newIssues > 0 && resolvedIssues > 0) {
return `${sprintf( baseString = s__(
n__( 'ciReport|%{reportType} %{status} detected %{newCount} new, and %{fixedCount} fixed vulnerabilities',
'%{type} detected 1 new vulnerability', );
'%{type} detected %{vulnerabilityCount} new vulnerabilities', } else if (newIssues > 0 && resolvedIssues === 0) {
newIssues, baseString = n__(
), 'ciReport|%{reportType} %{status} detected %{newCount} new vulnerability',
{ type, vulnerabilityCount: newIssues }, 'ciReport|%{reportType} %{status} detected %{newCount} new vulnerabilities',
)} newIssues,
${n__('and 1 fixed vulnerability', 'and %d fixed vulnerabilities', resolvedIssues)}`; );
} } else if (newIssues === 0 && resolvedIssues > 0) {
baseString = n__(
// with only fixed issues 'ciReport|%{reportType} %{status} detected %{fixedCount} fixed vulnerability',
if (newIssues === 0 && resolvedIssues > 0) { 'ciReport|%{reportType} %{status} detected %{fixedCount} fixed vulnerabilities',
return sprintf( resolvedIssues,
n__(
'%{type} detected 1 fixed vulnerability',
'%{type} detected %{vulnerabilityCount} fixed vulnerabilities',
resolvedIssues,
),
{ type, vulnerabilityCount: resolvedIssues },
); );
} else if (allIssues > 0) {
baseString = s__('ciReport|%{reportType} %{status} detected no new vulnerabilities');
} else {
baseString = s__('ciReport|%{reportType} %{status} detected no vulnerabilities');
} }
} }
return '';
if (!status) {
baseString = baseString.replace('%{status}', '').replace(' ', ' ');
}
return sprintf(baseString, {
status,
reportType,
newCount: newIssues,
fixedCount: resolvedIssues,
});
}; };
export const statusIcon = (loading = false, failed = false, newIssues = 0, neutralIssues = 0) => { export const statusIcon = (loading = false, failed = false, newIssues = 0, neutralIssues = 0) => {
......
---
title: Polish security report externalizations
merge_request: 7373
author:
type: changed
...@@ -116,7 +116,7 @@ describe('Report summary widget', () => { ...@@ -116,7 +116,7 @@ describe('Report summary widget', () => {
.querySelector('.js-sast-summary') .querySelector('.js-sast-summary')
.textContent.trim() .textContent.trim()
.replace(/\s\s+/g, ' '), .replace(/\s\s+/g, ' '),
).toEqual('SAST resulted in error while loading results'); ).toEqual('SAST: Loading resulted in an error');
expect(vm.$el.querySelector('.js-sast-summary .js-ci-status-icon-warning')).not.toBeNull(); expect(vm.$el.querySelector('.js-sast-summary .js-ci-status-icon-warning')).not.toBeNull();
done(); done();
...@@ -131,7 +131,7 @@ describe('Report summary widget', () => { ...@@ -131,7 +131,7 @@ describe('Report summary widget', () => {
.querySelector('.js-dss-summary') .querySelector('.js-dss-summary')
.textContent.trim() .textContent.trim()
.replace(/\s\s+/g, ' '), .replace(/\s\s+/g, ' '),
).toEqual('Dependency scanning resulted in error while loading results'); ).toEqual('Dependency scanning: Loading resulted in an error');
expect(vm.$el.querySelector('.js-dss-summary .js-ci-status-icon-warning')).not.toBeNull(); expect(vm.$el.querySelector('.js-dss-summary .js-ci-status-icon-warning')).not.toBeNull();
}) })
...@@ -147,7 +147,7 @@ describe('Report summary widget', () => { ...@@ -147,7 +147,7 @@ describe('Report summary widget', () => {
.querySelector('.js-sast-container-summary') .querySelector('.js-sast-container-summary')
.textContent.trim() .textContent.trim()
.replace(/\s\s+/g, ' '), .replace(/\s\s+/g, ' '),
).toEqual('Container scanning resulted in error while loading results'); ).toEqual('Container scanning: Loading resulted in an error');
expect(vm.$el.querySelector('.js-sast-container-summary .js-ci-status-icon-warning')).not.toBeNull(); expect(vm.$el.querySelector('.js-sast-container-summary .js-ci-status-icon-warning')).not.toBeNull();
}) })
...@@ -163,7 +163,7 @@ describe('Report summary widget', () => { ...@@ -163,7 +163,7 @@ describe('Report summary widget', () => {
.querySelector('.js-dast-summary') .querySelector('.js-dast-summary')
.textContent.trim() .textContent.trim()
.replace(/\s\s+/g, ' '), .replace(/\s\s+/g, ' '),
).toEqual('DAST resulted in error while loading results'); ).toEqual('DAST: Loading resulted in an error');
expect(vm.$el.querySelector('.js-dast-summary .js-ci-status-icon-warning')).not.toBeNull(); expect(vm.$el.querySelector('.js-dast-summary .js-ci-status-icon-warning')).not.toBeNull();
}) })
......
...@@ -212,6 +212,8 @@ describe('Card security reports app', () => { ...@@ -212,6 +212,8 @@ describe('Card security reports app', () => {
// Renders DAST result // Renders DAST result
expect(vm.$el.textContent).toContain('DAST detected 2 vulnerabilities'); expect(vm.$el.textContent).toContain('DAST detected 2 vulnerabilities');
expect(vm.$el.textContent).not.toContain('for the source branch only');
done(); done();
}, 0); }, 0);
}); });
...@@ -245,14 +247,10 @@ describe('Card security reports app', () => { ...@@ -245,14 +247,10 @@ describe('Card security reports app', () => {
setTimeout(() => { setTimeout(() => {
expect(vm.$el.querySelector('.fa-spinner')).toBeNull(); expect(vm.$el.querySelector('.fa-spinner')).toBeNull();
expect(vm.$el.textContent).toContain('SAST resulted in error while loading results'); expect(vm.$el.textContent).toContain('SAST: Loading resulted in an error');
expect(vm.$el.textContent).toContain( expect(vm.$el.textContent).toContain('Dependency scanning: Loading resulted in an error');
'Dependency scanning resulted in error while loading results', expect(vm.$el.textContent).toContain('Container scanning: Loading resulted in an error');
); expect(vm.$el.textContent).toContain('DAST: Loading resulted in an error');
expect(vm.$el.textContent).toContain(
'Container scanning resulted in error while loading results',
);
expect(vm.$el.textContent).toContain('DAST resulted in error while loading results');
done(); done();
}, 0); }, 0);
}); });
......
...@@ -74,16 +74,12 @@ describe('Grouped security reports app', () => { ...@@ -74,16 +74,12 @@ describe('Grouped security reports app', () => {
); );
expect(vm.$el.querySelector('.js-collapse-btn').textContent.trim()).toEqual('Expand'); expect(vm.$el.querySelector('.js-collapse-btn').textContent.trim()).toEqual('Expand');
expect(trimText(vm.$el.textContent)).toContain('SAST: Loading resulted in an error');
expect(trimText(vm.$el.textContent)).toContain( expect(trimText(vm.$el.textContent)).toContain(
'SAST resulted in error while loading results', 'Dependency scanning: Loading resulted in an error',
); );
expect(trimText(vm.$el.textContent)).toContain( expect(vm.$el.textContent).toContain('Container scanning: Loading resulted in an error');
'Dependency scanning resulted in error while loading results', expect(vm.$el.textContent).toContain('DAST: Loading resulted in an error');
);
expect(vm.$el.textContent).toContain(
'Container scanning resulted in error while loading results',
);
expect(vm.$el.textContent).toContain('DAST resulted in error while loading results');
done(); done();
}, 0); }, 0);
}); });
...@@ -184,7 +180,7 @@ describe('Grouped security reports app', () => { ...@@ -184,7 +180,7 @@ describe('Grouped security reports app', () => {
// Renders the summary text // Renders the summary text
expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual( expect(vm.$el.querySelector('.js-code-text').textContent.trim()).toEqual(
'Security scanning detected 6 new vulnerabilities and 2 fixed vulnerabilities', 'Security scanning detected 6 new, and 2 fixed vulnerabilities',
); );
// Renders the expand button // Renders the expand button
...@@ -192,12 +188,12 @@ describe('Grouped security reports app', () => { ...@@ -192,12 +188,12 @@ describe('Grouped security reports app', () => {
// Renders Sast result // Renders Sast result
expect(trimText(vm.$el.textContent)).toContain( expect(trimText(vm.$el.textContent)).toContain(
'SAST detected 2 new vulnerabilities and 1 fixed vulnerability', 'SAST detected 2 new, and 1 fixed vulnerabilities',
); );
// Renders DSS result // Renders DSS result
expect(trimText(vm.$el.textContent)).toContain( expect(trimText(vm.$el.textContent)).toContain(
'Dependency scanning detected 2 new vulnerabilities and 1 fixed vulnerability', 'Dependency scanning detected 2 new, and 1 fixed vulnerabilities',
); );
// Renders container scanning result // Renders container scanning result
expect(vm.$el.textContent).toContain('Container scanning detected 1 new vulnerability'); expect(vm.$el.textContent).toContain('Container scanning detected 1 new vulnerability');
......
...@@ -35,7 +35,6 @@ describe('Split security reports app', () => { ...@@ -35,7 +35,6 @@ describe('Split security reports app', () => {
store: createStore(), store: createStore(),
props: { props: {
headBlobPath: 'path', headBlobPath: 'path',
baseBlobPath: 'path',
sastHeadPath: 'sast_head.json', sastHeadPath: 'sast_head.json',
dependencyScanningHeadPath: 'dss_head.json', dependencyScanningHeadPath: 'dss_head.json',
dastHeadPath: 'dast_head.json', dastHeadPath: 'dast_head.json',
...@@ -79,7 +78,6 @@ describe('Split security reports app', () => { ...@@ -79,7 +78,6 @@ describe('Split security reports app', () => {
store: createStore(), store: createStore(),
props: { props: {
headBlobPath: 'path', headBlobPath: 'path',
baseBlobPath: 'path',
sastHeadPath: 'sast_head.json', sastHeadPath: 'sast_head.json',
dependencyScanningHeadPath: 'dss_head.json', dependencyScanningHeadPath: 'dss_head.json',
dastHeadPath: 'dast_head.json', dastHeadPath: 'dast_head.json',
...@@ -110,6 +108,8 @@ describe('Split security reports app', () => { ...@@ -110,6 +108,8 @@ describe('Split security reports app', () => {
// Renders DAST result // Renders DAST result
expect(vm.$el.textContent).toContain('DAST detected 2 vulnerabilities'); expect(vm.$el.textContent).toContain('DAST detected 2 vulnerabilities');
expect(vm.$el.textContent).not.toContain('for the source branch only');
done(); done();
}, 0); }, 0);
}); });
...@@ -159,7 +159,6 @@ describe('Split security reports app', () => { ...@@ -159,7 +159,6 @@ describe('Split security reports app', () => {
store: createStore(), store: createStore(),
props: { props: {
headBlobPath: 'path', headBlobPath: 'path',
baseBlobPath: 'path',
sastHeadPath: 'sast_head.json', sastHeadPath: 'sast_head.json',
dependencyScanningHeadPath: 'dss_head.json', dependencyScanningHeadPath: 'dss_head.json',
dastHeadPath: 'dast_head.json', dastHeadPath: 'dast_head.json',
...@@ -181,14 +180,10 @@ describe('Split security reports app', () => { ...@@ -181,14 +180,10 @@ describe('Split security reports app', () => {
setTimeout(() => { setTimeout(() => {
expect(vm.$el.querySelector('.fa-spinner')).toBeNull(); expect(vm.$el.querySelector('.fa-spinner')).toBeNull();
expect(vm.$el.textContent).toContain('SAST resulted in error while loading results'); expect(vm.$el.textContent).toContain('SAST: Loading resulted in an error');
expect(vm.$el.textContent).toContain( expect(vm.$el.textContent).toContain('Dependency scanning: Loading resulted in an error');
'Dependency scanning resulted in error while loading results', expect(vm.$el.textContent).toContain('Container scanning: Loading resulted in an error');
); expect(vm.$el.textContent).toContain('DAST: Loading resulted in an error');
expect(vm.$el.textContent).toContain(
'Container scanning resulted in error while loading results',
);
expect(vm.$el.textContent).toContain('DAST resulted in error while loading results');
done(); done();
}, 0); }, 0);
}); });
......
...@@ -16,7 +16,7 @@ import { ...@@ -16,7 +16,7 @@ import {
} from 'ee/vue_shared/security_reports/store/getters'; } from 'ee/vue_shared/security_reports/store/getters';
describe('Security reports getters', () => { describe('Security reports getters', () => {
function removeBreakLine (data) { function removeBreakLine(data) {
return data.replace(/\r?\n|\r/g, '').replace(/\s\s+/g, ' '); return data.replace(/\r?\n|\r/g, '').replace(/\s\s+/g, ' ');
} }
...@@ -27,16 +27,18 @@ describe('Security reports getters', () => { ...@@ -27,16 +27,18 @@ describe('Security reports getters', () => {
newState.sast.paths.head = 'foo'; newState.sast.paths.head = 'foo';
newState.sast.paths.base = 'bar'; newState.sast.paths.base = 'bar';
expect(groupedSastText(newState)).toEqual('SAST detected no security vulnerabilities'); expect(groupedSastText(newState)).toEqual('SAST detected no vulnerabilities');
}); });
}); });
describe('with only `all` issues', () => { describe('with only `all` issues', () => {
it('returns no new issues text', () => { it('returns no new issues text', () => {
const newState = state(); const newState = state();
newState.sast.paths.head = 'foo';
newState.sast.paths.base = 'bar';
newState.sast.allIssues = [{}]; newState.sast.allIssues = [{}];
expect(groupedSastText(newState)).toEqual('SAST detected no new security vulnerabilities'); expect(groupedSastText(newState)).toEqual('SAST detected no new vulnerabilities');
}); });
}); });
...@@ -73,7 +75,7 @@ describe('Security reports getters', () => { ...@@ -73,7 +75,7 @@ describe('Security reports getters', () => {
newState.sast.resolvedIssues = [{}]; newState.sast.resolvedIssues = [{}];
expect(removeBreakLine(groupedSastText(newState))).toEqual( expect(removeBreakLine(groupedSastText(newState))).toEqual(
'SAST detected 1 new vulnerability and 1 fixed vulnerability', 'SAST detected 1 new, and 1 fixed vulnerabilities',
); );
}); });
}); });
...@@ -94,7 +96,7 @@ describe('Security reports getters', () => { ...@@ -94,7 +96,7 @@ describe('Security reports getters', () => {
const newState = state(); const newState = state();
newState.sast.hasError = true; newState.sast.hasError = true;
expect(groupedSastText(newState)).toEqual('SAST resulted in error while loading results'); expect(groupedSastText(newState)).toEqual('SAST: Loading resulted in an error');
}); });
}); });
...@@ -117,7 +119,7 @@ describe('Security reports getters', () => { ...@@ -117,7 +119,7 @@ describe('Security reports getters', () => {
newState.sastContainer.paths.base = 'foo'; newState.sastContainer.paths.base = 'foo';
expect(groupedSastContainerText(newState)).toEqual( expect(groupedSastContainerText(newState)).toEqual(
'Container scanning detected no security vulnerabilities', 'Container scanning detected no vulnerabilities',
); );
}); });
}); });
...@@ -157,7 +159,7 @@ describe('Security reports getters', () => { ...@@ -157,7 +159,7 @@ describe('Security reports getters', () => {
newState.sastContainer.resolvedIssues = [{}]; newState.sastContainer.resolvedIssues = [{}];
expect(removeBreakLine(groupedSastContainerText(newState))).toEqual( expect(removeBreakLine(groupedSastContainerText(newState))).toEqual(
'Container scanning detected 1 new vulnerability and 1 fixed vulnerability', 'Container scanning detected 1 new, and 1 fixed vulnerabilities',
); );
}); });
}); });
...@@ -184,7 +186,7 @@ describe('Security reports getters', () => { ...@@ -184,7 +186,7 @@ describe('Security reports getters', () => {
newState.dast.paths.head = 'foo'; newState.dast.paths.head = 'foo';
newState.dast.paths.base = 'foo'; newState.dast.paths.base = 'foo';
expect(groupedDastText(newState)).toEqual('DAST detected no security vulnerabilities'); expect(groupedDastText(newState)).toEqual('DAST detected no vulnerabilities');
}); });
}); });
...@@ -221,7 +223,7 @@ describe('Security reports getters', () => { ...@@ -221,7 +223,7 @@ describe('Security reports getters', () => {
newState.dast.resolvedIssues = [{}]; newState.dast.resolvedIssues = [{}];
expect(removeBreakLine(groupedDastText(newState))).toEqual( expect(removeBreakLine(groupedDastText(newState))).toEqual(
'DAST detected 1 new vulnerability and 1 fixed vulnerability', 'DAST detected 1 new, and 1 fixed vulnerabilities',
); );
}); });
}); });
...@@ -246,7 +248,7 @@ describe('Security reports getters', () => { ...@@ -246,7 +248,7 @@ describe('Security reports getters', () => {
newState.dependencyScanning.paths.base = 'foo'; newState.dependencyScanning.paths.base = 'foo';
expect(groupedDependencyText(newState)).toEqual( expect(groupedDependencyText(newState)).toEqual(
'Dependency scanning detected no security vulnerabilities', 'Dependency scanning detected no vulnerabilities',
); );
}); });
}); });
...@@ -285,7 +287,7 @@ describe('Security reports getters', () => { ...@@ -285,7 +287,7 @@ describe('Security reports getters', () => {
newState.dependencyScanning.resolvedIssues = [{}]; newState.dependencyScanning.resolvedIssues = [{}];
expect(removeBreakLine(groupedDependencyText(newState))).toEqual( expect(removeBreakLine(groupedDependencyText(newState))).toEqual(
'Dependency scanning detected 1 new vulnerability and 1 fixed vulnerability', 'Dependency scanning detected 1 new, and 1 fixed vulnerabilities',
); );
}); });
}); });
...@@ -323,9 +325,7 @@ describe('Security reports getters', () => { ...@@ -323,9 +325,7 @@ describe('Security reports getters', () => {
noBaseInAllReports: true, noBaseInAllReports: true,
areReportsLoading: false, areReportsLoading: false,
}), }),
).toEqual( ).toEqual('Security scanning detected no vulnerabilities for the source branch only');
'Security scanning detected no vulnerabilities for the source branch only',
);
}); });
it('returns is loading text', () => { it('returns is loading text', () => {
...@@ -343,6 +343,7 @@ describe('Security reports getters', () => { ...@@ -343,6 +343,7 @@ describe('Security reports getters', () => {
newState.summaryCounts = { newState.summaryCounts = {
added: 2, added: 2,
fixed: 4, fixed: 4,
existing: 5,
}; };
expect( expect(
...@@ -351,7 +352,7 @@ describe('Security reports getters', () => { ...@@ -351,7 +352,7 @@ describe('Security reports getters', () => {
noBaseInAllReports: false, noBaseInAllReports: false,
areReportsLoading: false, areReportsLoading: false,
}), }),
).toContain('Security scanning detected 2 new vulnerabilities and 4 fixed vulnerabilities'); ).toEqual('Security scanning detected 2 new, and 4 fixed vulnerabilities');
}); });
it('returns added text', () => { it('returns added text', () => {
...@@ -359,6 +360,7 @@ describe('Security reports getters', () => { ...@@ -359,6 +360,7 @@ describe('Security reports getters', () => {
newState.summaryCounts = { newState.summaryCounts = {
added: 2, added: 2,
fixed: 0, fixed: 0,
existing: 5,
}; };
expect( expect(
...@@ -367,7 +369,7 @@ describe('Security reports getters', () => { ...@@ -367,7 +369,7 @@ describe('Security reports getters', () => {
noBaseInAllReports: false, noBaseInAllReports: false,
areReportsLoading: false, areReportsLoading: false,
}), }),
).toContain('Security scanning detected 2 new vulnerabilities'); ).toEqual('Security scanning detected 2 new vulnerabilities');
}); });
it('returns fixed text', () => { it('returns fixed text', () => {
...@@ -375,6 +377,7 @@ describe('Security reports getters', () => { ...@@ -375,6 +377,7 @@ describe('Security reports getters', () => {
newState.summaryCounts = { newState.summaryCounts = {
added: 0, added: 0,
fixed: 4, fixed: 4,
existing: 5,
}; };
expect( expect(
...@@ -383,7 +386,7 @@ describe('Security reports getters', () => { ...@@ -383,7 +386,7 @@ describe('Security reports getters', () => {
noBaseInAllReports: false, noBaseInAllReports: false,
areReportsLoading: false, areReportsLoading: false,
}), }),
).toContain('Security scanning detected 4 fixed vulnerabilities'); ).toEqual('Security scanning detected 4 fixed vulnerabilities');
}); });
it('returns added and fixed while loading text', () => { it('returns added and fixed while loading text', () => {
...@@ -391,6 +394,7 @@ describe('Security reports getters', () => { ...@@ -391,6 +394,7 @@ describe('Security reports getters', () => {
newState.summaryCounts = { newState.summaryCounts = {
added: 2, added: 2,
fixed: 4, fixed: 4,
existing: 5,
}; };
expect( expect(
...@@ -399,9 +403,41 @@ describe('Security reports getters', () => { ...@@ -399,9 +403,41 @@ describe('Security reports getters', () => {
noBaseInAllReports: false, noBaseInAllReports: false,
areReportsLoading: true, areReportsLoading: true,
}), }),
).toContain( ).toEqual('Security scanning (is loading) detected 2 new, and 4 fixed vulnerabilities');
'Security scanning (is loading) detected 2 new vulnerabilities and 4 fixed vulnerabilities', });
);
it('returns no new text if there are existing ones', () => {
const newState = state();
newState.summaryCounts = {
added: 0,
fixed: 0,
existing: 5,
};
expect(
groupedSummaryText(newState, {
allReportsHaveError: false,
noBaseInAllReports: false,
areReportsLoading: false,
}),
).toEqual('Security scanning detected no new vulnerabilities');
});
it('returns no text if there are existing ones', () => {
const newState = state();
newState.summaryCounts = {
added: 0,
fixed: 0,
existing: 0,
};
expect(
groupedSummaryText(newState, {
allReportsHaveError: false,
noBaseInAllReports: false,
areReportsLoading: false,
}),
).toEqual('Security scanning detected no vulnerabilities');
}); });
}); });
......
...@@ -118,6 +118,7 @@ describe('security reports mutations', () => { ...@@ -118,6 +118,7 @@ describe('security reports mutations', () => {
expect(stateCopy.sast.isLoading).toEqual(false); expect(stateCopy.sast.isLoading).toEqual(false);
expect(stateCopy.sast.newIssues).toEqual(parsedSastIssuesHead); expect(stateCopy.sast.newIssues).toEqual(parsedSastIssuesHead);
expect(stateCopy.sast.resolvedIssues).toEqual(parsedSastBaseStore); expect(stateCopy.sast.resolvedIssues).toEqual(parsedSastBaseStore);
expect(stateCopy.summaryCounts).toEqual({ added: 2, fixed: 1, existing: 1 });
}); });
}); });
...@@ -130,6 +131,7 @@ describe('security reports mutations', () => { ...@@ -130,6 +131,7 @@ describe('security reports mutations', () => {
expect(stateCopy.sast.isLoading).toEqual(false); expect(stateCopy.sast.isLoading).toEqual(false);
expect(stateCopy.sast.newIssues).toEqual(parsedSastIssuesStore); expect(stateCopy.sast.newIssues).toEqual(parsedSastIssuesStore);
expect(stateCopy.summaryCounts).toEqual({ added: 3, fixed: 0, existing: 0 });
}); });
}); });
}); });
...@@ -177,6 +179,7 @@ describe('security reports mutations', () => { ...@@ -177,6 +179,7 @@ describe('security reports mutations', () => {
expect(stateCopy.sastContainer.isLoading).toEqual(false); expect(stateCopy.sastContainer.isLoading).toEqual(false);
expect(stateCopy.sastContainer.newIssues).toEqual(dockerNewIssues); expect(stateCopy.sastContainer.newIssues).toEqual(dockerNewIssues);
expect(stateCopy.sastContainer.resolvedIssues).toEqual([]); expect(stateCopy.sastContainer.resolvedIssues).toEqual([]);
expect(stateCopy.summaryCounts).toEqual({ added: 1, fixed: 0, existing: 0 });
}); });
}); });
...@@ -188,6 +191,7 @@ describe('security reports mutations', () => { ...@@ -188,6 +191,7 @@ describe('security reports mutations', () => {
expect(stateCopy.sastContainer.isLoading).toEqual(false); expect(stateCopy.sastContainer.isLoading).toEqual(false);
expect(stateCopy.sastContainer.newIssues).toEqual(dockerOnlyHeadParsed); expect(stateCopy.sastContainer.newIssues).toEqual(dockerOnlyHeadParsed);
expect(stateCopy.summaryCounts).toEqual({ added: 2, fixed: 0, existing: 0 });
}); });
}); });
}); });
...@@ -237,6 +241,7 @@ describe('security reports mutations', () => { ...@@ -237,6 +241,7 @@ describe('security reports mutations', () => {
expect(stateCopy.dast.newIssues).toEqual(parsedDastNewIssues); expect(stateCopy.dast.newIssues).toEqual(parsedDastNewIssues);
expect(stateCopy.dast.resolvedIssues).toEqual([]); expect(stateCopy.dast.resolvedIssues).toEqual([]);
expect(stateCopy.summaryCounts).toEqual({ added: 1, fixed: 0, existing: 0 });
}); });
}); });
...@@ -248,6 +253,7 @@ describe('security reports mutations', () => { ...@@ -248,6 +253,7 @@ describe('security reports mutations', () => {
expect(stateCopy.dast.isLoading).toEqual(false); expect(stateCopy.dast.isLoading).toEqual(false);
expect(stateCopy.dast.newIssues).toEqual(parsedDast); expect(stateCopy.dast.newIssues).toEqual(parsedDast);
expect(stateCopy.summaryCounts).toEqual({ added: 2, fixed: 0, existing: 0 });
}); });
}); });
}); });
...@@ -297,8 +303,10 @@ describe('security reports mutations', () => { ...@@ -297,8 +303,10 @@ describe('security reports mutations', () => {
expect(stateCopy.dependencyScanning.isLoading).toEqual(false); expect(stateCopy.dependencyScanning.isLoading).toEqual(false);
expect(stateCopy.dependencyScanning.newIssues).toEqual(parsedDependencyScanningIssuesHead); expect(stateCopy.dependencyScanning.newIssues).toEqual(parsedDependencyScanningIssuesHead);
expect(stateCopy.dependencyScanning.resolvedIssues) expect(stateCopy.dependencyScanning.resolvedIssues).toEqual(
.toEqual(parsedDependencyScanningBaseStore); parsedDependencyScanningBaseStore,
);
expect(stateCopy.summaryCounts).toEqual({ added: 2, fixed: 1, existing: 1 });
}); });
}); });
...@@ -310,6 +318,7 @@ describe('security reports mutations', () => { ...@@ -310,6 +318,7 @@ describe('security reports mutations', () => {
}); });
expect(stateCopy.dependencyScanning.isLoading).toEqual(false); expect(stateCopy.dependencyScanning.isLoading).toEqual(false);
expect(stateCopy.dependencyScanning.newIssues).toEqual(parsedDependencyScanningIssuesStore); expect(stateCopy.dependencyScanning.newIssues).toEqual(parsedDependencyScanningIssuesStore);
expect(stateCopy.summaryCounts).toEqual({ added: 3, fixed: 0, existing: 0 });
}); });
}); });
}); });
...@@ -486,7 +495,7 @@ describe('security reports mutations', () => { ...@@ -486,7 +495,7 @@ describe('security reports mutations', () => {
it('updates issue in the new issues list', () => { it('updates issue in the new issues list', () => {
stateCopy.sast.newIssues = parsedSastIssuesHead; stateCopy.sast.newIssues = parsedSastIssuesHead;
stateCopy.sast.resolvedIssues = []; stateCopy.sast.resolvedIssues = [];
stateCopy.sast.AllIssues = []; stateCopy.sast.allIssues = [];
const updatedIssue = { const updatedIssue = {
...parsedSastIssuesHead[0], ...parsedSastIssuesHead[0],
foo: 'bar', foo: 'bar',
...@@ -499,7 +508,7 @@ describe('security reports mutations', () => { ...@@ -499,7 +508,7 @@ describe('security reports mutations', () => {
it('updates issue in the resolved issues list', () => { it('updates issue in the resolved issues list', () => {
stateCopy.sast.newIssues = []; stateCopy.sast.newIssues = [];
stateCopy.sast.resolvedIssues = parsedSastIssuesHead; stateCopy.sast.resolvedIssues = parsedSastIssuesHead;
stateCopy.sast.AllIssues = []; stateCopy.sast.allIssues = [];
const updatedIssue = { const updatedIssue = {
...parsedSastIssuesHead[0], ...parsedSastIssuesHead[0],
foo: 'bar', foo: 'bar',
...@@ -512,14 +521,14 @@ describe('security reports mutations', () => { ...@@ -512,14 +521,14 @@ describe('security reports mutations', () => {
it('updates issue in the all issues list', () => { it('updates issue in the all issues list', () => {
stateCopy.sast.newIssues = []; stateCopy.sast.newIssues = [];
stateCopy.sast.resolvedIssues = []; stateCopy.sast.resolvedIssues = [];
stateCopy.sast.AllIssues = parsedSastIssuesHead; stateCopy.sast.allIssues = parsedSastIssuesHead;
const updatedIssue = { const updatedIssue = {
...parsedSastIssuesHead[0], ...parsedSastIssuesHead[0],
foo: 'bar', foo: 'bar',
}; };
mutations[types.UPDATE_SAST_ISSUE](stateCopy, updatedIssue); mutations[types.UPDATE_SAST_ISSUE](stateCopy, updatedIssue);
expect(stateCopy.sast.AllIssues[0]).toEqual(updatedIssue); expect(stateCopy.sast.allIssues[0]).toEqual(updatedIssue);
}); });
}); });
...@@ -527,7 +536,7 @@ describe('security reports mutations', () => { ...@@ -527,7 +536,7 @@ describe('security reports mutations', () => {
it('updates issue in the new issues list', () => { it('updates issue in the new issues list', () => {
stateCopy.dependencyScanning.newIssues = parsedDependencyScanningIssuesHead; stateCopy.dependencyScanning.newIssues = parsedDependencyScanningIssuesHead;
stateCopy.dependencyScanning.resolvedIssues = []; stateCopy.dependencyScanning.resolvedIssues = [];
stateCopy.dependencyScanning.AllIssues = []; stateCopy.dependencyScanning.allIssues = [];
const updatedIssue = { const updatedIssue = {
...parsedDependencyScanningIssuesHead[0], ...parsedDependencyScanningIssuesHead[0],
foo: 'bar', foo: 'bar',
...@@ -540,7 +549,7 @@ describe('security reports mutations', () => { ...@@ -540,7 +549,7 @@ describe('security reports mutations', () => {
it('updates issue in the resolved issues list', () => { it('updates issue in the resolved issues list', () => {
stateCopy.sast.newIssues = []; stateCopy.sast.newIssues = [];
stateCopy.sast.resolvedIssues = parsedDependencyScanningIssuesHead; stateCopy.sast.resolvedIssues = parsedDependencyScanningIssuesHead;
stateCopy.sast.AllIssues = []; stateCopy.sast.allIssues = [];
const updatedIssue = { const updatedIssue = {
...parsedDependencyScanningIssuesHead[0], ...parsedDependencyScanningIssuesHead[0],
foo: 'bar', foo: 'bar',
...@@ -553,14 +562,14 @@ describe('security reports mutations', () => { ...@@ -553,14 +562,14 @@ describe('security reports mutations', () => {
it('updates issue in the all issues list', () => { it('updates issue in the all issues list', () => {
stateCopy.dependencyScanning.newIssues = []; stateCopy.dependencyScanning.newIssues = [];
stateCopy.dependencyScanning.resolvedIssues = []; stateCopy.dependencyScanning.resolvedIssues = [];
stateCopy.dependencyScanning.AllIssues = parsedDependencyScanningIssuesHead; stateCopy.dependencyScanning.allIssues = parsedDependencyScanningIssuesHead;
const updatedIssue = { const updatedIssue = {
...parsedDependencyScanningIssuesHead[0], ...parsedDependencyScanningIssuesHead[0],
foo: 'bar', foo: 'bar',
}; };
mutations[types.UPDATE_DEPENDENCY_SCANNING_ISSUE](stateCopy, updatedIssue); mutations[types.UPDATE_DEPENDENCY_SCANNING_ISSUE](stateCopy, updatedIssue);
expect(stateCopy.dependencyScanning.AllIssues[0]).toEqual(updatedIssue); expect(stateCopy.dependencyScanning.allIssues[0]).toEqual(updatedIssue);
}); });
}); });
...@@ -617,4 +626,3 @@ describe('security reports mutations', () => { ...@@ -617,4 +626,3 @@ describe('security reports mutations', () => {
}); });
}); });
}); });
...@@ -7,7 +7,7 @@ import { ...@@ -7,7 +7,7 @@ import {
parseDastIssues, parseDastIssues,
filterByKey, filterByKey,
getUnapprovedVulnerabilities, getUnapprovedVulnerabilities,
textBuilder, groupedTextBuilder,
statusIcon, statusIcon,
} from 'ee/vue_shared/security_reports/store/utils'; } from 'ee/vue_shared/security_reports/store/utils';
import { import {
...@@ -200,27 +200,29 @@ describe('security reports utils', () => { ...@@ -200,27 +200,29 @@ describe('security reports utils', () => {
describe('textBuilder', () => { describe('textBuilder', () => {
describe('with no issues', () => { describe('with no issues', () => {
it('should return no vulnerabiltities text', () => { it('should return no vulnerabiltities text', () => {
expect(textBuilder('', { head: 'foo', base: 'bar' }, 0, 0, 0)).toEqual( expect(groupedTextBuilder('', { head: 'foo', base: 'bar' }, 0, 0, 0)).toEqual(
' detected no security vulnerabilities', ' detected no vulnerabilities',
); );
}); });
}); });
describe('with only `all` issues', () => { describe('with only `all` issues', () => {
it('should return no new vulnerabiltities text', () => { it('should return no new vulnerabiltities text', () => {
expect(textBuilder('', {}, 0, 0, 1)).toEqual(' detected no new security vulnerabilities'); expect(groupedTextBuilder('', { head: 'foo', base: 'bar' }, 0, 0, 1)).toEqual(
' detected no new vulnerabilities',
);
}); });
}); });
describe('with new issues and without base', () => { describe('with new issues and without base', () => {
it('should return unable to compare text', () => { it('should return unable to compare text', () => {
expect(textBuilder('', { head: 'foo' }, 1, 0, 0)).toEqual( expect(groupedTextBuilder('', { head: 'foo' }, 1, 0, 0)).toEqual(
' detected 1 vulnerability for the source branch only', ' detected 1 vulnerability for the source branch only',
); );
}); });
it('should return unable to compare text with no vulnerability', () => { it('should return unable to compare text with no vulnerability', () => {
expect(textBuilder('', { head: 'foo' }, 0, 0, 0)).toEqual( expect(groupedTextBuilder('', { head: 'foo' }, 0, 0, 0)).toEqual(
' detected no vulnerabilities for the source branch only', ' detected no vulnerabilities for the source branch only',
); );
}); });
...@@ -229,10 +231,10 @@ describe('security reports utils', () => { ...@@ -229,10 +231,10 @@ describe('security reports utils', () => {
describe('with base and head', () => { describe('with base and head', () => {
describe('with only new issues', () => { describe('with only new issues', () => {
it('should return new issues text', () => { it('should return new issues text', () => {
expect(textBuilder('', { head: 'foo', base: 'foo' }, 1, 0, 0)).toEqual( expect(groupedTextBuilder('', { head: 'foo', base: 'foo' }, 1, 0, 0)).toEqual(
' detected 1 new vulnerability', ' detected 1 new vulnerability',
); );
expect(textBuilder('', { head: 'foo', base: 'foo' }, 2, 0, 0)).toEqual( expect(groupedTextBuilder('', { head: 'foo', base: 'foo' }, 2, 0, 0)).toEqual(
' detected 2 new vulnerabilities', ' detected 2 new vulnerabilities',
); );
}); });
...@@ -241,20 +243,20 @@ describe('security reports utils', () => { ...@@ -241,20 +243,20 @@ describe('security reports utils', () => {
describe('with new and resolved issues', () => { describe('with new and resolved issues', () => {
it('should return new and fixed issues text', () => { it('should return new and fixed issues text', () => {
expect( expect(
textBuilder('', { head: 'foo', base: 'foo' }, 1, 1, 0).replace(/\n+\s+/m, ' '), groupedTextBuilder('', { head: 'foo', base: 'foo' }, 1, 1, 0).replace(/\n+\s+/m, ' '),
).toEqual(' detected 1 new vulnerability and 1 fixed vulnerability'); ).toEqual(' detected 1 new, and 1 fixed vulnerabilities');
expect( expect(
textBuilder('', { head: 'foo', base: 'foo' }, 2, 2, 0).replace(/\n+\s+/m, ' '), groupedTextBuilder('', { head: 'foo', base: 'foo' }, 2, 2, 0).replace(/\n+\s+/m, ' '),
).toEqual(' detected 2 new vulnerabilities and 2 fixed vulnerabilities'); ).toEqual(' detected 2 new, and 2 fixed vulnerabilities');
}); });
}); });
describe('with only resolved issues', () => { describe('with only resolved issues', () => {
it('should return fixed issues text', () => { it('should return fixed issues text', () => {
expect(textBuilder('', { head: 'foo', base: 'foo' }, 0, 1, 0)).toEqual( expect(groupedTextBuilder('', { head: 'foo', base: 'foo' }, 0, 1, 0)).toEqual(
' detected 1 fixed vulnerability', ' detected 1 fixed vulnerability',
); );
expect(textBuilder('', { head: 'foo', base: 'foo' }, 0, 2, 0)).toEqual( expect(groupedTextBuilder('', { head: 'foo', base: 'foo' }, 0, 2, 0)).toEqual(
' detected 2 fixed vulnerabilities', ' detected 2 fixed vulnerabilities',
); );
}); });
......
...@@ -171,26 +171,6 @@ msgstr "" ...@@ -171,26 +171,6 @@ msgstr ""
msgid "%{title} changes" msgid "%{title} changes"
msgstr "" msgstr ""
msgid "%{type} detected 1 fixed vulnerability"
msgid_plural "%{type} detected %{vulnerabilityCount} fixed vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "%{type} detected 1 new vulnerability"
msgid_plural "%{type} detected %{vulnerabilityCount} new vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "%{type} detected 1 vulnerability"
msgid_plural "%{type} detected %{vulnerabilityCount} vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "%{type} detected 1 vulnerability for the source branch only"
msgid_plural "%{type} detected %{vulnerabilityCount} vulnerabilities for the source branch only"
msgstr[0] ""
msgstr[1] ""
msgid "%{unstaged} unstaged and %{staged} staged changes" msgid "%{unstaged} unstaged and %{staged} staged changes"
msgstr "" msgstr ""
...@@ -6684,14 +6664,6 @@ msgstr "" ...@@ -6684,14 +6664,6 @@ msgstr ""
msgid "Security Dashboard" msgid "Security Dashboard"
msgstr "" msgstr ""
msgid "Security scanning detected %d vulnerability for the source branch only"
msgid_plural "Security scanning detected %d vulnerabilities for the source branch only"
msgstr[0] ""
msgstr[1] ""
msgid "Security scanning detected no vulnerabilities for the source branch only"
msgstr ""
msgid "SecurityDashboard| The security dashboard displays the latest security report. Use it to find and fix vulnerabilities." msgid "SecurityDashboard| The security dashboard displays the latest security report. Use it to find and fix vulnerabilities."
msgstr "" msgstr ""
...@@ -8611,16 +8583,6 @@ msgstr "" ...@@ -8611,16 +8583,6 @@ msgstr ""
msgid "among other things" msgid "among other things"
msgstr "" msgstr ""
msgid "and %d fixed vulnerability"
msgid_plural "and %d fixed vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "and 1 fixed vulnerability"
msgid_plural "and %d fixed vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "assign yourself" msgid "assign yourself"
msgstr "" msgstr ""
...@@ -8648,61 +8610,87 @@ msgstr "" ...@@ -8648,61 +8610,87 @@ msgstr ""
msgid "ciReport|%{remainingPackagesCount} more" msgid "ciReport|%{remainingPackagesCount} more"
msgstr "" msgstr ""
msgid "ciReport|%{reportName} is loading" msgid "ciReport|%{reportType} %{status} detected %{fixedCount} fixed vulnerability"
msgid_plural "ciReport|%{reportType} %{status} detected %{fixedCount} fixed vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "ciReport|%{reportType} %{status} detected %{newCount} new vulnerability"
msgid_plural "ciReport|%{reportType} %{status} detected %{newCount} new vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "ciReport|%{reportType} %{status} detected %{newCount} new, and %{fixedCount} fixed vulnerabilities"
msgstr "" msgstr ""
msgid "ciReport|%{reportName} resulted in error while loading results" msgid "ciReport|%{reportType} %{status} detected %{newCount} vulnerability for the source branch only"
msgid_plural "ciReport|%{reportType} %{status} detected %{newCount} vulnerabilities for the source branch only"
msgstr[0] ""
msgstr[1] ""
msgid "ciReport|%{reportType} %{status} detected no new vulnerabilities"
msgstr "" msgstr ""
msgid "ciReport|%{type} detected no new security vulnerabilities" msgid "ciReport|%{reportType} %{status} detected no vulnerabilities"
msgstr "" msgstr ""
msgid "ciReport|%{type} detected no security vulnerabilities" msgid "ciReport|%{reportType} %{status} detected no vulnerabilities for the source branch only"
msgstr "" msgstr ""
msgid "ciReport|%{type} detected no vulnerabilities" msgid "ciReport|%{reportType} detected %{vulnerabilityCount} vulnerability"
msgid_plural "ciReport|%{reportType} detected %{vulnerabilityCount} vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "ciReport|%{reportType} detected no vulnerabilities"
msgstr "" msgstr ""
msgid "ciReport|Class" msgid "ciReport|%{reportType} is loading"
msgstr "" msgstr ""
msgid "ciReport|Code quality" msgid "ciReport|%{reportType}: Loading resulted in an error"
msgstr "" msgstr ""
msgid "ciReport|Confidence" msgid "ciReport|(errors when loading results)"
msgstr "" msgstr ""
msgid "ciReport|Container scanning detected" msgid "ciReport|(is loading)"
msgstr "" msgstr ""
msgid "ciReport|Container scanning detects known vulnerabilities in your docker images." msgid "ciReport|(is loading, errors when loading results)"
msgstr "" msgstr ""
msgid "ciReport|Container scanning is loading" msgid "ciReport|Class"
msgstr "" msgstr ""
msgid "ciReport|Container scanning resulted in error while loading results" msgid "ciReport|Code quality"
msgstr "" msgstr ""
msgid "ciReport|DAST detected" msgid "ciReport|Confidence"
msgstr "" msgstr ""
msgid "ciReport|DAST is loading" msgid "ciReport|Container scanning"
msgstr "" msgstr ""
msgid "ciReport|DAST resulted in error while loading results" msgid "ciReport|Container scanning detected"
msgstr "" msgstr ""
msgid "ciReport|Dependency Scanning detects known vulnerabilities in your source code's dependencies." msgid "ciReport|Container scanning detects known vulnerabilities in your docker images."
msgstr "" msgstr ""
msgid "ciReport|Dependency scanning detected" msgid "ciReport|DAST"
msgstr ""
msgid "ciReport|DAST detected"
msgstr ""
msgid "ciReport|Dependency Scanning detects known vulnerabilities in your source code's dependencies."
msgstr "" msgstr ""
msgid "ciReport|Dependency scanning is loading" msgid "ciReport|Dependency scanning"
msgstr "" msgstr ""
msgid "ciReport|Dependency scanning resulted in error while loading results" msgid "ciReport|Dependency scanning detected"
msgstr "" msgstr ""
msgid "ciReport|Description" msgid "ciReport|Description"
...@@ -8775,13 +8763,10 @@ msgstr "" ...@@ -8775,13 +8763,10 @@ msgstr ""
msgid "ciReport|Revert dismissal" msgid "ciReport|Revert dismissal"
msgstr "" msgstr ""
msgid "ciReport|SAST detected" msgid "ciReport|SAST"
msgstr "" msgstr ""
msgid "ciReport|SAST is loading" msgid "ciReport|SAST detected"
msgstr ""
msgid "ciReport|SAST resulted in error while loading results"
msgstr "" msgstr ""
msgid "ciReport|Security scanning" msgid "ciReport|Security scanning"
...@@ -8790,9 +8775,6 @@ msgstr "" ...@@ -8790,9 +8775,6 @@ msgstr ""
msgid "ciReport|Security scanning failed loading any results" msgid "ciReport|Security scanning failed loading any results"
msgstr "" msgstr ""
msgid "ciReport|Security scanning is loading"
msgstr ""
msgid "ciReport|Severity" msgid "ciReport|Severity"
msgstr "" msgstr ""
...@@ -8866,19 +8848,6 @@ msgstr[1] "" ...@@ -8866,19 +8848,6 @@ msgstr[1] ""
msgid "deploy token" msgid "deploy token"
msgstr "" msgstr ""
msgid "detected %d fixed vulnerability"
msgid_plural "detected %d fixed vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "detected %d new vulnerability"
msgid_plural "detected %d new vulnerabilities"
msgstr[0] ""
msgstr[1] ""
msgid "detected no vulnerabilities"
msgstr ""
msgid "disabled" msgid "disabled"
msgstr "" msgstr ""
......
...@@ -96,7 +96,7 @@ describe('ee merge request widget options', () => { ...@@ -96,7 +96,7 @@ describe('ee merge request widget options', () => {
vm.$el.querySelector('.js-sast-widget .report-block-list-issue-description') vm.$el.querySelector('.js-sast-widget .report-block-list-issue-description')
.textContent, .textContent,
), ),
).toEqual('SAST detected 2 new vulnerabilities and 1 fixed vulnerability'); ).toEqual('SAST detected 2 new, and 1 fixed vulnerabilities');
done(); done();
}, 0); }, 0);
}); });
...@@ -118,7 +118,7 @@ describe('ee merge request widget options', () => { ...@@ -118,7 +118,7 @@ describe('ee merge request widget options', () => {
vm.$el.querySelector('.js-sast-widget .report-block-list-issue-description') vm.$el.querySelector('.js-sast-widget .report-block-list-issue-description')
.textContent, .textContent,
), ),
).toEqual('SAST detected no new security vulnerabilities'); ).toEqual('SAST detected no new vulnerabilities');
done(); done();
}, 0); }, 0);
}); });
...@@ -140,7 +140,7 @@ describe('ee merge request widget options', () => { ...@@ -140,7 +140,7 @@ describe('ee merge request widget options', () => {
vm.$el.querySelector('.js-sast-widget .report-block-list-issue-description') vm.$el.querySelector('.js-sast-widget .report-block-list-issue-description')
.textContent, .textContent,
).trim(), ).trim(),
).toEqual('SAST detected no security vulnerabilities'); ).toEqual('SAST detected no vulnerabilities');
done(); done();
}, 0); }, 0);
}); });
...@@ -158,7 +158,7 @@ describe('ee merge request widget options', () => { ...@@ -158,7 +158,7 @@ describe('ee merge request widget options', () => {
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setTimeout(() => {
expect(removeBreakLine(vm.$el.querySelector('.js-sast-widget').textContent)).toContain( expect(removeBreakLine(vm.$el.querySelector('.js-sast-widget').textContent)).toContain(
'SAST resulted in error while loading results', 'SAST: Loading resulted in an error',
); );
done(); done();
}, 0); }, 0);
...@@ -212,7 +212,7 @@ describe('ee merge request widget options', () => { ...@@ -212,7 +212,7 @@ describe('ee merge request widget options', () => {
'.js-dependency-scanning-widget .report-block-list-issue-description', '.js-dependency-scanning-widget .report-block-list-issue-description',
).textContent, ).textContent,
), ),
).toEqual('Dependency scanning detected 2 new vulnerabilities and 1 fixed vulnerability'); ).toEqual('Dependency scanning detected 2 new, and 1 fixed vulnerabilities');
done(); done();
}, 0); }, 0);
}); });
...@@ -235,7 +235,7 @@ describe('ee merge request widget options', () => { ...@@ -235,7 +235,7 @@ describe('ee merge request widget options', () => {
'.js-dependency-scanning-widget .report-block-list-issue-description', '.js-dependency-scanning-widget .report-block-list-issue-description',
).textContent, ).textContent,
), ),
).toEqual('Dependency scanning detected no new security vulnerabilities'); ).toEqual('Dependency scanning detected no new vulnerabilities');
done(); done();
}, 0); }, 0);
}); });
...@@ -258,7 +258,7 @@ describe('ee merge request widget options', () => { ...@@ -258,7 +258,7 @@ describe('ee merge request widget options', () => {
'.js-dependency-scanning-widget .report-block-list-issue-description', '.js-dependency-scanning-widget .report-block-list-issue-description',
).textContent, ).textContent,
), ),
).toEqual('Dependency scanning detected no security vulnerabilities'); ).toEqual('Dependency scanning detected no vulnerabilities');
done(); done();
}, 0); }, 0);
}); });
...@@ -277,7 +277,7 @@ describe('ee merge request widget options', () => { ...@@ -277,7 +277,7 @@ describe('ee merge request widget options', () => {
setTimeout(() => { setTimeout(() => {
expect( expect(
removeBreakLine(vm.$el.querySelector('.js-dependency-scanning-widget').textContent), removeBreakLine(vm.$el.querySelector('.js-dependency-scanning-widget').textContent),
).toContain('Dependency scanning resulted in error while loading results'); ).toContain('Dependency scanning: Loading resulted in an error');
done(); done();
}, 0); }, 0);
}); });
...@@ -588,7 +588,7 @@ describe('ee merge request widget options', () => { ...@@ -588,7 +588,7 @@ describe('ee merge request widget options', () => {
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setTimeout(() => {
expect(vm.$el.querySelector('.js-sast-container').textContent.trim()).toContain( expect(vm.$el.querySelector('.js-sast-container').textContent.trim()).toContain(
'Container scanning resulted in error while loading results', 'Container scanning: Loading resulted in an error',
); );
done(); done();
}, 0); }, 0);
...@@ -658,7 +658,7 @@ describe('ee merge request widget options', () => { ...@@ -658,7 +658,7 @@ describe('ee merge request widget options', () => {
it('should render error indicator', done => { it('should render error indicator', done => {
setTimeout(() => { setTimeout(() => {
expect(vm.$el.querySelector('.js-dast-widget').textContent.trim()).toContain( expect(vm.$el.querySelector('.js-dast-widget').textContent.trim()).toContain(
'DAST resulted in error while loading results', 'DAST: Loading resulted in an error',
); );
done(); done();
}, 0); }, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment