Commit 7a85b0e3 authored by Pavel Shutsin's avatar Pavel Shutsin

Merge branch 'sy-fix-alert-incident-creation' into 'master'

Create issue which is already associated with the alert

See merge request gitlab-org/gitlab!79913
parents c4637276 c813ed1f
......@@ -22,8 +22,6 @@ module AlertManagement
return result unless result.success?
issue = result.payload[:issue]
return error(object_errors(alert), issue) unless associate_alert_with_issue(issue)
update_title_for(issue)
SystemNoteService.new_alert_issue(alert, issue, user)
......@@ -47,14 +45,11 @@ module AlertManagement
user,
title: alert_presenter.title,
description: alert_presenter.issue_description,
severity: alert.severity
severity: alert.severity,
alert: alert
).execute
end
def associate_alert_with_issue(issue)
alert.update(issue_id: issue.id)
end
def update_title_for(issue)
return unless issue.title == DEFAULT_ALERT_TITLE
......@@ -78,9 +73,5 @@ module AlertManagement
alert.present
end
end
def object_errors(object)
object.errors.full_messages.to_sentence
end
end
end
......@@ -2,15 +2,16 @@
module IncidentManagement
module Incidents
class CreateService < BaseService
class CreateService < ::BaseProjectService
ISSUE_TYPE = 'incident'
def initialize(project, current_user, title:, description:, severity: IssuableSeverity::DEFAULT)
super(project, current_user)
def initialize(project, current_user, title:, description:, severity: IssuableSeverity::DEFAULT, alert: nil)
super(project: project, current_user: current_user)
@title = title
@description = description
@severity = severity
@alert = alert
end
def execute
......@@ -21,11 +22,16 @@ module IncidentManagement
title: title,
description: description,
issue_type: ISSUE_TYPE,
severity: severity
severity: severity,
alert_management_alert: alert
},
spam_params: nil
).execute
if alert
return error(alert.errors.full_messages.to_sentence, issue) unless alert.valid?
end
return error(issue.errors.full_messages.to_sentence, issue) unless issue.valid?
success(issue)
......@@ -33,7 +39,7 @@ module IncidentManagement
private
attr_reader :title, :description, :severity
attr_reader :title, :description, :severity, :alert
def success(issue)
ServiceResponse.success(payload: { issue: issue })
......
......@@ -43,10 +43,10 @@ RSpec.describe AlertManagement::CreateAlertIssueService do
expect(execute).to be_success
end
it 'updates alert.issue_id' do
it 'sets alert.issue_id in the same ActiveRecord query execution' do
execute
expect(alert.reload.issue_id).to eq(created_issue.id)
expect(alert.issue_id).to eq(created_issue.id)
end
it 'creates a system note' do
......
......@@ -83,6 +83,25 @@ RSpec.describe IncidentManagement::Incidents::CreateService do
it 'result payload contains an Issue object' do
expect(create_incident.payload[:issue]).to be_kind_of(Issue)
end
context 'with alert' do
let(:alert) { create(:alert_management_alert, project: project) }
subject(:create_incident) { described_class.new(project, user, title: title, description: description, alert: alert).execute }
it 'associates the alert with the incident' do
expect(create_incident[:issue].alert_management_alert).to eq(alert)
end
context 'the alert prevents the issue from saving' do
let(:alert) { create(:alert_management_alert, :with_validation_errors, project: project) }
it 'responds with errors' do
expect(create_incident).to be_error
expect(create_incident.message).to eq('Hosts hosts array is over 255 chars')
end
end
end
end
end
end
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