From b3aa2dc2f28e71dc656b1f4396517baecdd5b1b2 Mon Sep 17 00:00:00 2001 From: samdbeckham Date: Tue, 20 Aug 2019 10:03:48 +0100 Subject: [PATCH] Adds dependency scanning API reports to the MR - Uses the backend API to parse dependency scanning logic on the MR page - Maps the slightly misaligned data in the vulnerabilities - Uses polling because the end point is a polling one - Adds an action for storing the endpoint in vuex - Adds a new action for calling the endpoint - Puts all the above behind a feature flag - Adds action tests - Adds mutation tests - Adds component tests - creates a pollUntilComplete function for easier reusability - creates a `parseDiff` util to make migration simpler --- .../grouped_security_reports_app.vue | 21 ++- .../security_reports/store/actions.js | 73 ++++++--- .../security_reports/store/mutation_types.js | 2 + .../security_reports/store/mutations.js | 25 +-- .../security_reports/store/state.js | 1 + .../security_reports/store/utils.js | 21 +++ .../security_reports/store/mutations_spec.js | 58 +++++++ .../grouped_security_reports_app_spec.js | 118 +++++++++----- .../security_reports/store/actions_spec.js | 144 ++++++++++++++++++ 9 files changed, 396 insertions(+), 67 deletions(-) diff --git a/ee/app/assets/javascripts/vue_shared/security_reports/grouped_security_reports_app.vue b/ee/app/assets/javascripts/vue_shared/security_reports/grouped_security_reports_app.vue index ab98b376d4d293..83fd2ccf7dd035 100644 --- a/ee/app/assets/javascripts/vue_shared/security_reports/grouped_security_reports_app.vue +++ b/ee/app/assets/javascripts/vue_shared/security_reports/grouped_security_reports_app.vue @@ -171,6 +171,11 @@ export default { shouldRenderSastContainer() { const { head, diffEndpoint } = this.sastContainer.paths; + return head || diffEndpoint; + }, + shouldRenderDependencyScanning() { + const { head, diffEndpoint } = this.dependencyScanning.paths; + return head || diffEndpoint; }, }, @@ -229,7 +234,17 @@ export default { this.fetchDastReports(); } - if (this.dependencyScanningHeadPath) { + const dependencyScanningDiffEndpoint = + gl && gl.mrWidgetData && gl.mrWidgetData.dependency_scanning_comparison_path; + + if ( + gon.features && + gon.features.dependencyScanningMergeRequestReportApi && + dependencyScanningDiffEndpoint + ) { + this.setDependencyScanningDiffEndpoint(dependencyScanningDiffEndpoint); + this.fetchDependencyScanningDiff(); + } else if (this.dependencyScanningHeadPath) { this.setDependencyScanningHeadPath(this.dependencyScanningHeadPath); if (this.dependencyScanningBasePath) { @@ -274,6 +289,8 @@ export default { 'hideDismissalDeleteButtons', 'fetchSastContainerDiff', 'setSastContainerDiffEndpoint', + 'fetchDependencyScanningDiff', + 'setDependencyScanningDiffEndpoint', ]), ...mapActions('sast', { setSastHeadPath: 'setHeadPath', @@ -322,7 +339,7 @@ export default { /> -