Commit 366f1337 authored by samdbeckham's avatar samdbeckham

Adds a "resolved" key to resolved vulnerabilities and conditionally displays...

Adds a "resolved" key to resolved vulnerabilities and conditionally displays action button based on that key
parent e6f21f01
......@@ -203,30 +203,31 @@ export default {
{{ __('Cancel' ) }}
</button>
<loading-button
:loading="modal.isDismissingIssue"
:disabled="modal.isDismissingIssue"
:label="revertTitle"
container-class="js-dismiss-btn btn btn-close"
@click="handleDismissClick"
/>
<template v-if="!modal.vulnerability.resolved">
<loading-button
:loading="modal.isDismissingIssue"
:disabled="modal.isDismissingIssue"
:label="revertTitle"
container-class="js-dismiss-btn btn btn-close"
@click="handleDismissClick"
/>
<a
v-if="modal.vulnerability.hasIssue"
:href="modal.vulnerability.issueFeedback && modal.vulnerability.issueFeedback.issue_url"
rel="noopener noreferrer nofollow"
class="btn btn-success btn-inverted"
>
{{ __('View issue' ) }}
</a>
<loading-button
v-else
:loading="modal.isCreatingNewIssue"
:disabled="modal.isCreatingNewIssue"
:label="__('Create issue')"
container-class="btn btn-success btn-inverted"
@click="createNewIssue"
/>
<a
v-if="modal.vulnerability.hasIssue"
:href="modal.vulnerability.issueFeedback && modal.vulnerability.issueFeedback.issue_url"
rel="noopener noreferrer nofollow"
class="btn btn-success btn-inverted"
>
{{ __('View issue' ) }}
</a>
<loading-button
:loading="modal.isCreatingNewIssue"
:disabled="modal.isCreatingNewIssue"
:label="__('Create issue')"
container-class="btn btn-success btn-inverted"
@click="createNewIssue"
/>
</template>
</div>
</modal>
</template>
......@@ -67,7 +67,8 @@ export default {
const parsedBase = parseSastIssues(reports.base, reports.enrichData, state.blobPath.base);
const newIssues = filterByKey(parsedHead, parsedBase, filterKey);
const resolvedIssues = filterByKey(parsedBase, parsedHead, filterKey);
const resolvedIssues = filterByKey(parsedBase, parsedHead, filterKey)
.map(issue => ({ ...issue, resolved: true }));
const allIssues = filterByKey(parsedHead, newIssues.concat(resolvedIssues), filterKey);
state.sast.newIssues = newIssues;
......@@ -222,7 +223,8 @@ export default {
state.blobPath.base);
const newIssues = filterByKey(parsedHead, parsedBase, filterKey);
const resolvedIssues = filterByKey(parsedBase, parsedHead, filterKey);
const resolvedIssues = filterByKey(parsedBase, parsedHead, filterKey)
.map(issue => ({ ...issue, resolved: true }));
const allIssues = filterByKey(parsedHead, newIssues.concat(resolvedIssues), filterKey);
state.dependencyScanning.newIssues = newIssues;
......
......@@ -190,4 +190,29 @@ describe('Security Reports modal', () => {
expect(vm.$el.querySelector('.js-link-vulnerabilityFeedbackHelpPath').getAttribute('href')).toEqual('feedbacksHelpPath');
});
});
describe('with a resolved issue', () => {
beforeEach(() => {
store.dispatch('setModalData', {
tool: 'bundler_audit',
message: 'Arbitrary file existence disclosure in Action Pack',
url: 'https://groups.google.com/forum/#!topic/rubyonrails-security/rMTQy4oRCGk',
cve: 'CVE-2014-9999',
file: 'Gemfile.lock',
solution: 'upgrade to ~> 3.2.21, ~> 4.0.11.1, ~> 4.0.12, ~> 4.1.7.1, >= 4.1.8',
title: 'Arbitrary file existence disclosure in Action Pack',
path: 'Gemfile.lock',
urlPath: 'path/Gemfile.lock',
resolved: true,
});
vm = mountComponentWithStore(Component, {
store,
});
});
it('does not render a button to dismiss issue', () => {
expect(vm.$el.querySelector('.js-dismiss-btn')).toBeFalsy();
});
});
});
......@@ -312,6 +312,7 @@ export const parsedSastBaseStore = [
value: 'CVE-2016-9999',
link: 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9999',
}],
resolved: true,
},
];
......@@ -498,6 +499,7 @@ export const parsedDependencyScanningBaseStore = [
links: [{
url: 'https://groups.google.com/forum/#!topic/rubyonrails-security/335P1DcLG00',
}],
resolved: true,
},
];
......
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