diff options
Diffstat (limited to 'spec/services/projects/prometheus/alerts/notify_service_spec.rb')
-rw-r--r-- | spec/services/projects/prometheus/alerts/notify_service_spec.rb | 127 |
1 files changed, 36 insertions, 91 deletions
diff --git a/spec/services/projects/prometheus/alerts/notify_service_spec.rb b/spec/services/projects/prometheus/alerts/notify_service_spec.rb index 95acedb1e76..aae257e3e3a 100644 --- a/spec/services/projects/prometheus/alerts/notify_service_spec.rb +++ b/spec/services/projects/prometheus/alerts/notify_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Projects::Prometheus::Alerts::NotifyService do +RSpec.describe Projects::Prometheus::Alerts::NotifyService do include PrometheusHelpers let_it_be(:project, reload: true) { create(:project) } @@ -36,48 +36,8 @@ describe Projects::Prometheus::Alerts::NotifyService do end end - shared_examples 'processes incident issues' do |amount| - let(:create_incident_service) { spy } - - it 'processes issues' do - expect(IncidentManagement::ProcessPrometheusAlertWorker) - .to receive(:perform_async) - .with(project.id, kind_of(Hash)) - .exactly(amount).times - - Sidekiq::Testing.inline! do - expect(subject).to be_success - end - end - end - - shared_examples 'does not process incident issues' do - it 'does not process issues' do - expect(IncidentManagement::ProcessPrometheusAlertWorker) - .not_to receive(:perform_async) - - expect(subject).to be_success - end - end - - shared_examples 'persists events' do - let(:create_events_service) { spy } - - it 'persists events' do - expect(Projects::Prometheus::Alerts::CreateEventsService) - .to receive(:new) - .and_return(create_events_service) - - expect(create_events_service) - .to receive(:execute) - - expect(subject).to be_success - end - end - shared_examples 'notifies alerts' do it_behaves_like 'sends notification email' - it_behaves_like 'persists events' end shared_examples 'no notifications' do |http_status:| @@ -102,6 +62,41 @@ describe Projects::Prometheus::Alerts::NotifyService do let(:payload_alert_firing) { payload_raw['alerts'].first } let(:token) { 'token' } + context 'with environment specific clusters' do + let(:prd_cluster) do + cluster + end + + let(:stg_cluster) do + create(:cluster, :provided_by_user, projects: [project], enabled: true, environment_scope: 'stg/*') + end + + let(:stg_environment) do + create(:environment, project: project, name: 'stg/1') + end + + let(:alert_firing) do + create(:prometheus_alert, project: project, environment: stg_environment) + end + + before do + create(:clusters_applications_prometheus, :installed, + cluster: prd_cluster, alert_manager_token: token) + create(:clusters_applications_prometheus, :installed, + cluster: stg_cluster, alert_manager_token: nil) + end + + context 'without token' do + let(:token_input) { nil } + + it_behaves_like 'notifies alerts' + end + + context 'with token' do + it_behaves_like 'no notifications', http_status: :unauthorized + end + end + context 'with project specific cluster' do using RSpec::Parameterized::TableSyntax @@ -222,8 +217,6 @@ describe Projects::Prometheus::Alerts::NotifyService do context 'when incident_management_setting does not exist' do let!(:setting) { nil } - it_behaves_like 'persists events' - it 'does not send notification email', :sidekiq_might_not_need_inline do expect_any_instance_of(NotificationService) .not_to receive(:async) @@ -241,8 +234,6 @@ describe Projects::Prometheus::Alerts::NotifyService do create(:project_incident_management_setting, send_email: false, project: project) end - it_behaves_like 'persists events' - it 'does not send notification' do expect(NotificationService).not_to receive(:new) @@ -276,45 +267,6 @@ describe Projects::Prometheus::Alerts::NotifyService do end end end - - context 'process incident issues' do - before do - create(:prometheus_service, project: project) - create(:project_alerting_setting, project: project, token: token) - end - - context 'with create_issue setting enabled' do - before do - setting.update!(create_issue: true) - end - - it_behaves_like 'processes incident issues', 2 - - context 'multiple firing alerts' do - let(:payload_raw) do - prometheus_alert_payload(firing: [alert_firing, alert_firing], resolved: []) - end - - it_behaves_like 'processes incident issues', 2 - end - - context 'without firing alerts' do - let(:payload_raw) do - prometheus_alert_payload(firing: [], resolved: [alert_resolved]) - end - - it_behaves_like 'processes incident issues', 1 - end - end - - context 'with create_issue setting disabled' do - before do - setting.update!(create_issue: false) - end - - it_behaves_like 'does not process incident issues' - end - end end context 'with invalid payload' do @@ -345,13 +297,6 @@ describe Projects::Prometheus::Alerts::NotifyService do subject end - - it 'does not process issues' do - expect(IncidentManagement::ProcessPrometheusAlertWorker) - .not_to receive(:perform_async) - - subject - end end end |