summaryrefslogtreecommitdiff
path: root/spec/services/alert_management/create_alert_issue_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/alert_management/create_alert_issue_service_spec.rb')
-rw-r--r--spec/services/alert_management/create_alert_issue_service_spec.rb47
1 files changed, 34 insertions, 13 deletions
diff --git a/spec/services/alert_management/create_alert_issue_service_spec.rb b/spec/services/alert_management/create_alert_issue_service_spec.rb
index 9bc8b731dc1..a8f2b4ee09c 100644
--- a/spec/services/alert_management/create_alert_issue_service_spec.rb
+++ b/spec/services/alert_management/create_alert_issue_service_spec.rb
@@ -4,19 +4,18 @@ require 'spec_helper'
RSpec.describe AlertManagement::CreateAlertIssueService do
let_it_be(:user) { create(:user) }
- let_it_be(:project) { create(:project) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:project) { create(:project, group: group) }
let_it_be(:payload) do
{
- 'annotations' => {
- 'title' => 'Alert title'
- },
'startsAt' => '2020-04-27T10:10:22.265949279Z',
'generatorURL' => 'http://8d467bd4607a:9090/graph?g0.expr=vector%281%29&g0.tab=1'
}
end
let_it_be(:generic_alert, reload: true) { create(:alert_management_alert, :triggered, project: project, payload: payload) }
- let_it_be(:prometheus_alert) { create(:alert_management_alert, :triggered, :prometheus, project: project, payload: payload) }
+ let_it_be(:prometheus_alert, reload: true) { create(:alert_management_alert, :triggered, :prometheus, project: project, payload: payload) }
let(:alert) { generic_alert }
+ let(:alert_presenter) { alert.present }
let(:created_issue) { Issue.last! }
describe '#execute' do
@@ -29,7 +28,7 @@ RSpec.describe AlertManagement::CreateAlertIssueService do
.and_return(can_create)
end
- shared_examples 'creating an alert' do
+ shared_examples 'creating an alert issue' do
it 'creates an issue' do
expect { execute }.to change { project.issues.count }.by(1)
end
@@ -48,11 +47,27 @@ RSpec.describe AlertManagement::CreateAlertIssueService do
expect(alert.reload.issue_id).to eq(created_issue.id)
end
- it 'sets issue author to the current user' do
+ it 'creates a system note' do
+ expect { execute }.to change { alert.reload.notes.count }.by(1)
+ end
+ end
+
+ shared_examples 'setting an issue attributes' do
+ before do
execute
+ end
+ it 'sets issue author to the current user' do
expect(created_issue.author).to eq(user)
end
+
+ it 'sets the issue title' do
+ expect(created_issue.title).to eq(alert.title)
+ end
+
+ it 'sets the issue description' do
+ expect(created_issue.description).to include(alert_presenter.issue_summary_markdown.strip)
+ end
end
context 'when a user is allowed to create an issue' do
@@ -69,27 +84,33 @@ RSpec.describe AlertManagement::CreateAlertIssueService do
context 'when the alert is prometheus alert' do
let(:alert) { prometheus_alert }
+ let(:issue) { subject.payload[:issue] }
- it_behaves_like 'creating an alert'
+ it_behaves_like 'creating an alert issue'
+ it_behaves_like 'setting an issue attributes'
+ it_behaves_like 'create alert issue sets issue labels'
end
context 'when the alert is generic' do
let(:alert) { generic_alert }
+ let(:issue) { subject.payload[:issue] }
- it_behaves_like 'creating an alert'
+ it_behaves_like 'creating an alert issue'
+ it_behaves_like 'setting an issue attributes'
+ it_behaves_like 'create alert issue sets issue labels'
end
context 'when issue cannot be created' do
- let(:alert) { prometheus_alert }
+ let(:alert) { generic_alert }
before do
- # set invalid payload for Prometheus alert
- alert.update!(payload: {})
+ # Invalid alert
+ alert.update_columns(title: '')
end
it 'has an unsuccessful status' do
expect(execute).to be_error
- expect(execute.message).to eq('invalid alert')
+ expect(execute.message).to eq("Title can't be blank")
end
end