Skip to content
代码片段 群组 项目
提交 fa6e155b 编辑于 作者: Savas Vedova's avatar Savas Vedova
浏览文件

Merge branch '364781-add-false-positive-alert-to-vulnerability-details' into 'master'

Add false positive alert to Vulnerability Details

See merge request gitlab-org/gitlab!91254
No related branches found
No related tags found
无相关合并请求
...@@ -10,6 +10,7 @@ import { ...@@ -10,6 +10,7 @@ import {
import { s__, __ } from '~/locale'; import { s__, __ } from '~/locale';
import CodeBlock from '~/vue_shared/components/code_block.vue'; import CodeBlock from '~/vue_shared/components/code_block.vue';
import DetailItem from './detail_item.vue'; import DetailItem from './detail_item.vue';
import FalsePositiveAlert from './false_positive_alert.vue';
import VulnerabilityDetailSection from './vulnerability_detail_section.vue'; import VulnerabilityDetailSection from './vulnerability_detail_section.vue';
import VulnerabilityTraining from './vulnerability_training.vue'; import VulnerabilityTraining from './vulnerability_training.vue';
...@@ -17,6 +18,7 @@ export default { ...@@ -17,6 +18,7 @@ export default {
name: 'VulnerabilityDetails', name: 'VulnerabilityDetails',
components: { components: {
CodeBlock, CodeBlock,
FalsePositiveAlert,
GlLink, GlLink,
SeverityBadge, SeverityBadge,
DetailItem, DetailItem,
...@@ -57,6 +59,9 @@ export default { ...@@ -57,6 +59,9 @@ export default {
fileUrl() { fileUrl() {
return (this.location.blobPath || '') + (this.lineNumber ? `#L${this.lineNumber}` : ''); return (this.location.blobPath || '') + (this.lineNumber ? `#L${this.lineNumber}` : '');
}, },
isFalsePositive() {
return Boolean(this.vulnerability.falsePositive);
},
lineNumber() { lineNumber() {
const { startLine: start, endLine: end } = this.location; const { startLine: start, endLine: end } = this.location;
return end > start ? `${start}-${end}` : start; return end > start ? `${start}-${end}` : start;
...@@ -201,6 +206,8 @@ export default { ...@@ -201,6 +206,8 @@ export default {
<template> <template>
<div class="md" data-qa-selector="vulnerability_details"> <div class="md" data-qa-selector="vulnerability_details">
<false-positive-alert v-if="isFalsePositive" class="gl-mt-4!" />
<h1 <h1
v-if="vulnerability.title" v-if="vulnerability.title"
class="mt-3 mb-2 border-bottom-0" class="mt-3 mb-2 border-bottom-0"
......
...@@ -8,6 +8,7 @@ import { ...@@ -8,6 +8,7 @@ import {
VULNERABILITY_TRAINING_HEADING, VULNERABILITY_TRAINING_HEADING,
} from 'ee/vulnerabilities/constants'; } from 'ee/vulnerabilities/constants';
import VulnerabilityTraining from 'ee/vulnerabilities/components/vulnerability_training.vue'; import VulnerabilityTraining from 'ee/vulnerabilities/components/vulnerability_training.vue';
import FalsePositiveAlert from 'ee/vulnerabilities/components/false_positive_alert.vue';
describe('Vulnerability Details', () => { describe('Vulnerability Details', () => {
let wrapper; let wrapper;
...@@ -31,6 +32,7 @@ describe('Vulnerability Details', () => { ...@@ -31,6 +32,7 @@ describe('Vulnerability Details', () => {
propsData, propsData,
provide: { provide: {
projectFullPath: TEST_PROJECT_FULL_PATH, projectFullPath: TEST_PROJECT_FULL_PATH,
canViewFalsePositive: true,
}, },
...options, ...options,
}); });
...@@ -42,6 +44,7 @@ describe('Vulnerability Details', () => { ...@@ -42,6 +44,7 @@ describe('Vulnerability Details', () => {
const getAllById = (id) => wrapper.findAll(`[data-testid="${id}"]`); const getAllById = (id) => wrapper.findAll(`[data-testid="${id}"]`);
const getText = (id) => getById(id).text(); const getText = (id) => getById(id).text();
const findVulnerabilityTraining = () => wrapper.findComponent(VulnerabilityTraining); const findVulnerabilityTraining = () => wrapper.findComponent(VulnerabilityTraining);
const findFalsePositiveAlert = () => wrapper.findComponent(FalsePositiveAlert);
afterEach(() => { afterEach(() => {
wrapper.destroy(); wrapper.destroy();
...@@ -53,6 +56,7 @@ describe('Vulnerability Details', () => { ...@@ -53,6 +56,7 @@ describe('Vulnerability Details', () => {
expect(wrapper.findComponent(SeverityBadge).props('severity')).toBe(vulnerability.severity); expect(wrapper.findComponent(SeverityBadge).props('severity')).toBe(vulnerability.severity);
expect(getText('reportType')).toBe(`Tool: ${vulnerability.reportType}`); expect(getText('reportType')).toBe(`Tool: ${vulnerability.reportType}`);
expect(findFalsePositiveAlert().exists()).toBe(false);
expect(getById('title').exists()).toBe(false); expect(getById('title').exists()).toBe(false);
expect(getById('image').exists()).toBe(false); expect(getById('image').exists()).toBe(false);
expect(getById('os').exists()).toBe(false); expect(getById('os').exists()).toBe(false);
...@@ -65,6 +69,14 @@ describe('Vulnerability Details', () => { ...@@ -65,6 +69,14 @@ describe('Vulnerability Details', () => {
expect(getAllById('identifier')).toHaveLength(0); expect(getAllById('identifier')).toHaveLength(0);
}); });
it.each([true, false])(
'shows/hides the false-positive alert when `falsePositive` is: %s',
(falsePositive) => {
createWrapper({ falsePositive });
expect(findFalsePositiveAlert().exists()).toBe(falsePositive);
},
);
it('renders description when descriptionHtml is not present', () => { it('renders description when descriptionHtml is not present', () => {
createWrapper({ createWrapper({
descriptionHtml: null, descriptionHtml: null,
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册