diff options
Diffstat (limited to 'spec/services/projects')
3 files changed, 126 insertions, 0 deletions
diff --git a/spec/services/projects/prometheus/alerts/create_service_spec.rb b/spec/services/projects/prometheus/alerts/create_service_spec.rb new file mode 100644 index 00000000000..50c776df734 --- /dev/null +++ b/spec/services/projects/prometheus/alerts/create_service_spec.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Projects::Prometheus::Alerts::CreateService do + let_it_be(:project) { create(:project) } + let_it_be(:user) { create(:user) } + + let(:service) { described_class.new(project, user, params) } + + subject { service.execute } + + describe '#execute' do + context 'with params' do + let_it_be(:environment) { create(:environment, project: project) } + + let_it_be(:metric) do + create(:prometheus_metric, project: project) + end + + let(:params) do + { + environment_id: environment.id, + prometheus_metric_id: metric.id, + operator: '<', + threshold: 1.0 + } + end + + it 'creates an alert' do + expect(subject).to be_persisted + + expect(subject).to have_attributes( + project: project, + environment: environment, + prometheus_metric: metric, + operator: 'lt', + threshold: 1.0 + ) + end + end + + context 'without params' do + let(:params) { {} } + + it 'fails to create' do + expect(subject).to be_new_record + expect(subject).to be_invalid + end + end + end +end diff --git a/spec/services/projects/prometheus/alerts/destroy_service_spec.rb b/spec/services/projects/prometheus/alerts/destroy_service_spec.rb new file mode 100644 index 00000000000..7205ace8308 --- /dev/null +++ b/spec/services/projects/prometheus/alerts/destroy_service_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Projects::Prometheus::Alerts::DestroyService do + let_it_be(:project) { create(:project) } + let_it_be(:user) { create(:user) } + let_it_be(:alert) { create(:prometheus_alert, project: project) } + + let(:service) { described_class.new(project, user, nil) } + + describe '#execute' do + subject { service.execute(alert) } + + it 'deletes the alert' do + expect(subject).to be_truthy + + expect(alert).to be_destroyed + end + end +end diff --git a/spec/services/projects/prometheus/alerts/update_service_spec.rb b/spec/services/projects/prometheus/alerts/update_service_spec.rb new file mode 100644 index 00000000000..8a99c2679f7 --- /dev/null +++ b/spec/services/projects/prometheus/alerts/update_service_spec.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Projects::Prometheus::Alerts::UpdateService do + let_it_be(:project) { create(:project) } + let_it_be(:user) { create(:user) } + let_it_be(:environment) { create(:environment, project: project) } + + let_it_be(:alert) do + create(:prometheus_alert, project: project, environment: environment) + end + + let(:service) { described_class.new(project, user, params) } + + let(:params) do + { + environment_id: alert.environment_id, + prometheus_metric_id: alert.prometheus_metric_id, + operator: '==', + threshold: 2.0 + } + end + + describe '#execute' do + subject { service.execute(alert) } + + context 'with valid params' do + it 'updates the alert' do + expect(subject).to be_truthy + + expect(alert.reload).to have_attributes( + operator: 'eq', + threshold: 2.0 + ) + end + end + + context 'with invalid params' do + let(:other_environment) { create(:environment) } + + before do + params[:environment_id] = other_environment.id + end + + it 'fails to update' do + expect(subject).to be_falsey + + expect(alert).to be_invalid + end + end + end +end |