Skip to content
Snippets Groups Projects
Unverified Commit 254cf7f9 authored by mc_rocha's avatar mc_rocha
Browse files

Refactor create_issue service and specs

parent 8f206ef4
No related merge requests found
......@@ -7,50 +7,58 @@ module SecurityFinding
class CreateIssueService < ::BaseProjectService
include VulnerabilitiesHelper
attr_reader :error_message
def execute
issue = nil
error_message = nil
@error_message = nil
ApplicationRecord.transaction do
vulnerability_response = Vulnerabilities::CreateFromSecurityFindingService.new(project: @project,
current_user: @current_user,
params: params).execute
if vulnerability_response.error?
error_message = vulnerability_response[:message]
raise ActiveRecord::Rollback
end
vulnerability = vulnerability_response.payload[:vulnerability]
vulnerability_data = vulnerability_data_with_category(vulnerability)
issue_response = Issues::CreateFromVulnerabilityDataService.new(@project,
@current_user,
vulnerability_data).execute
if issue_response[:status] == :error
error_message = issue_response[:message]
raise ActiveRecord::Rollback
end
issue = issue_response[:issue]
issue = create_issue(vulnerability)
issue_link_response = create_vulnerability_issue_link(vulnerability, issue)
if issue_link_response[:status] == :error
error_message = issue_link_response[:message]
@error_message = issue_link_response[:message]
raise ActiveRecord::Rollback
end
end
return error_response(error_message) if error_message
return error_response(@error_message) if @error_message
ServiceResponse.success(payload: { issue: issue })
end
private
def vulnerability
vulnerability_response = Vulnerabilities::CreateFromSecurityFindingService.new(project: @project,
current_user: @current_user,
params: params).execute
if vulnerability_response.error?
@error_message = vulnerability_response[:message]
raise ActiveRecord::Rollback
end
vulnerability_response.payload[:vulnerability]
end
def create_issue(vulnerability)
vulnerability_data = vulnerability_data_with_category(vulnerability)
issue_response = Issues::CreateFromVulnerabilityDataService.new(@project,
@current_user,
vulnerability_data).execute
if issue_response[:status] == :error
@error_message = issue_response[:message]
raise ActiveRecord::Rollback
end
issue_response[:issue]
end
def create_vulnerability_issue_link(vulnerability, issue)
raise Gitlab::Access::AccessDeniedError unless can?(@current_user, :read_security_resource, @project)
......
......@@ -20,26 +20,13 @@
let_it_be(:report_sast) { create(:ci_reports_security_report, pipeline: pipeline, type: :sast) }
let_it_be(:scan_sast) { create(:security_scan, :latest_successful, scan_type: :sast, build: artifact_sast.job) }
let_it_be(:pipeline_dast) { create(:ci_pipeline) }
let_it_be(:build_dast) { create(:ci_build, :success, name: 'dast', pipeline: pipeline_dast) }
let_it_be(:artifact_dast) { create(:ee_ci_job_artifact, :dast_with_evidence, job: build_dast) }
let_it_be(:report_dast) { create(:ci_reports_security_report, pipeline: pipeline_dast, type: :dast) }
let_it_be(:scan_dast) { create(:security_scan, :latest_successful, scan_type: :dast, build: artifact_dast.job) }
let_it_be(:user) { create(:user) }
let_it_be(:dast_security_findings) { [] }
let_it_be(:sast_security_findings) { [] }
before_all do
sast_content = File.read(artifact_sast.file.path)
Gitlab::Ci::Parsers::Security::Sast.parse!(sast_content, report_sast)
report_sast.merge!(report_sast)
dast_content = File.read(artifact_dast.file.path)
Gitlab::Ci::Parsers::Security::Dast.parse!(dast_content, report_dast)
report_dast.merge!(report_dast)
dast_security_findings.push(*insert_security_findings(report_dast, scan_dast))
sast_security_findings.push(*insert_security_findings(report_sast, scan_sast))
end
......
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