summaryrefslogtreecommitdiff
path: root/spec/helpers/operations_helper_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/helpers/operations_helper_spec.rb')
-rw-r--r--spec/helpers/operations_helper_spec.rb160
1 files changed, 160 insertions, 0 deletions
diff --git a/spec/helpers/operations_helper_spec.rb b/spec/helpers/operations_helper_spec.rb
new file mode 100644
index 00000000000..73deb2249bc
--- /dev/null
+++ b/spec/helpers/operations_helper_spec.rb
@@ -0,0 +1,160 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe OperationsHelper do
+ include Gitlab::Routing
+
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project, reload: true) { create(:project) }
+
+ before do
+ helper.instance_variable_set(:@project, project)
+ allow(helper).to receive(:current_user) { user }
+ end
+
+ describe '#alerts_settings_data' do
+ subject { helper.alerts_settings_data }
+
+ before do
+ allow(helper).to receive(:can?).with(user, :admin_operations, project) { true }
+ end
+
+ context 'initial service configuration' do
+ let_it_be(:alerts_service) { AlertsService.new(project: project) }
+ let_it_be(:prometheus_service) { PrometheusService.new(project: project) }
+
+ before do
+ allow(project).to receive(:find_or_initialize_service).with('alerts').and_return(alerts_service)
+ allow(project).to receive(:find_or_initialize_service).with('prometheus').and_return(prometheus_service)
+ end
+
+ it 'returns the correct values' do
+ expect(subject).to eq(
+ 'activated' => 'false',
+ 'url' => alerts_service.url,
+ 'authorization_key' => nil,
+ 'form_path' => project_service_path(project, alerts_service),
+ 'alerts_setup_url' => help_page_path('user/project/integrations/generic_alerts.md', anchor: 'setting-up-generic-alerts'),
+ 'alerts_usage_url' => project_alert_management_index_path(project),
+ 'prometheus_form_path' => project_service_path(project, prometheus_service),
+ 'prometheus_reset_key_path' => reset_alerting_token_project_settings_operations_path(project),
+ 'prometheus_authorization_key' => nil,
+ 'prometheus_api_url' => nil,
+ 'prometheus_activated' => 'false',
+ 'prometheus_url' => notify_project_prometheus_alerts_url(project, format: :json),
+ 'disabled' => 'false'
+ )
+ end
+ end
+
+ context 'with external Prometheus configured' do
+ let_it_be(:prometheus_service, reload: true) do
+ create(:prometheus_service, project: project)
+ end
+
+ context 'with external Prometheus enabled' do
+ it 'returns the correct values' do
+ expect(subject).to include(
+ 'prometheus_activated' => 'true',
+ 'prometheus_api_url' => prometheus_service.api_url
+ )
+ end
+ end
+
+ context 'with external Prometheus disabled' do
+ shared_examples 'Prometheus is disabled' do
+ it 'returns the correct values' do
+ expect(subject).to include(
+ 'prometheus_activated' => 'false',
+ 'prometheus_api_url' => prometheus_service.api_url
+ )
+ end
+ end
+
+ let(:cluster_managed) { false }
+
+ before do
+ allow(prometheus_service)
+ .to receive(:prometheus_available?)
+ .and_return(cluster_managed)
+
+ prometheus_service.update!(manual_configuration: false)
+ end
+
+ include_examples 'Prometheus is disabled'
+
+ context 'when cluster managed' do
+ let(:cluster_managed) { true }
+
+ include_examples 'Prometheus is disabled'
+ end
+ end
+
+ context 'with project alert setting' do
+ let_it_be(:project_alerting_setting) { create(:project_alerting_setting, project: project) }
+
+ it 'returns the correct values' do
+ expect(subject).to include(
+ 'prometheus_authorization_key' => project_alerting_setting.token,
+ 'prometheus_api_url' => prometheus_service.api_url
+ )
+ end
+ end
+ end
+
+ context 'with generic alerts service configured' do
+ let_it_be(:alerts_service) { create(:alerts_service, project: project) }
+
+ context 'with generic alerts enabled' do
+ it 'returns the correct values' do
+ expect(subject).to include(
+ 'activated' => 'true',
+ 'authorization_key' => alerts_service.token,
+ 'url' => alerts_service.url
+ )
+ end
+ end
+
+ context 'with generic alerts disabled' do
+ before do
+ alerts_service.update!(active: false)
+ end
+
+ it 'returns the correct values' do
+ expect(subject).to include(
+ 'activated' => 'false',
+ 'authorization_key' => alerts_service.token
+ )
+ end
+ end
+ end
+ end
+
+ describe '#operations_settings_data' do
+ let_it_be(:operations_settings) do
+ create(
+ :project_incident_management_setting,
+ project: project,
+ issue_template_key: 'template-key',
+ pagerduty_active: true
+ )
+ end
+
+ subject { helper.operations_settings_data }
+
+ it 'returns the correct set of data' do
+ is_expected.to eq(
+ operations_settings_endpoint: project_settings_operations_path(project),
+ templates: '[]',
+ create_issue: 'false',
+ issue_template_key: 'template-key',
+ send_email: 'false',
+ pagerduty_active: 'true',
+ pagerduty_token: operations_settings.pagerduty_token,
+ pagerduty_webhook_url: project_incidents_pagerduty_url(project, token: operations_settings.pagerduty_token),
+ pagerduty_reset_key_path: reset_pagerduty_token_project_settings_operations_path(project)
+ )
+ end
+ end
+end