summaryrefslogtreecommitdiff
path: root/spec/controllers/projects/settings/operations_controller_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/controllers/projects/settings/operations_controller_spec.rb')
-rw-r--r--spec/controllers/projects/settings/operations_controller_spec.rb115
1 files changed, 102 insertions, 13 deletions
diff --git a/spec/controllers/projects/settings/operations_controller_spec.rb b/spec/controllers/projects/settings/operations_controller_spec.rb
index ca1b0d2fe15..9fc9da1265e 100644
--- a/spec/controllers/projects/settings/operations_controller_spec.rb
+++ b/spec/controllers/projects/settings/operations_controller_spec.rb
@@ -6,9 +6,12 @@ RSpec.describe Projects::Settings::OperationsController do
let_it_be(:user) { create(:user) }
let_it_be(:project, reload: true) { create(:project) }
+ before_all do
+ project.add_maintainer(user)
+ end
+
before do
sign_in(user)
- project.add_maintainer(user)
end
shared_examples 'PATCHable' do
@@ -163,10 +166,6 @@ RSpec.describe Projects::Settings::OperationsController do
context 'updating each incident management setting' do
let(:new_incident_management_settings) { {} }
- before do
- project.add_maintainer(user)
- end
-
shared_examples 'a gitlab tracking event' do |params, event_key|
it "creates a gitlab tracking event #{event_key}" do
new_incident_management_settings = params
@@ -194,10 +193,6 @@ RSpec.describe Projects::Settings::OperationsController do
end
describe 'POST #reset_pagerduty_token' do
- before do
- project.add_maintainer(user)
- end
-
context 'with existing incident management setting has active PagerDuty webhook' do
let!(:incident_management_setting) do
create(:project_incident_management_setting, project: project, pagerduty_active: true)
@@ -392,10 +387,6 @@ RSpec.describe Projects::Settings::OperationsController do
end
describe 'POST #reset_alerting_token' do
- before do
- project.add_maintainer(user)
- end
-
context 'with existing alerting setting' do
let!(:alerting_setting) do
create(:project_alerting_setting, project: project)
@@ -478,6 +469,104 @@ RSpec.describe Projects::Settings::OperationsController do
end
end
+ context 'tracing integration' do
+ describe 'GET #show' do
+ context 'with existing setting' do
+ let_it_be(:setting) do
+ create(:project_tracing_setting, project: project)
+ end
+
+ it 'loads existing setting' do
+ get :show, params: project_params(project)
+
+ expect(controller.helpers.tracing_setting).to eq(setting)
+ end
+ end
+
+ context 'without an existing setting' do
+ it 'builds a new setting' do
+ get :show, params: project_params(project)
+
+ expect(controller.helpers.tracing_setting).to be_new_record
+ end
+ end
+ end
+
+ describe 'PATCH #update' do
+ let_it_be(:external_url) { 'https://gitlab.com' }
+ let(:params) do
+ {
+ tracing_setting_attributes: {
+ external_url: external_url
+ }
+ }
+ end
+
+ it_behaves_like 'PATCHable'
+
+ describe 'gitlab tracking', :snowplow do
+ shared_examples 'event tracking' do
+ it 'tracks an event' do
+ expect_snowplow_event(
+ category: 'project:operations:tracing',
+ action: 'external_url_populated'
+ )
+ end
+ end
+
+ shared_examples 'no event tracking' do
+ it 'does not track an event' do
+ expect_no_snowplow_event
+ end
+ end
+
+ before do
+ make_request
+ end
+
+ subject(:make_request) do
+ patch :update, params: project_params(project, params), format: :json
+ end
+
+ context 'without existing setting' do
+ context 'when creating a new setting' do
+ it_behaves_like 'event tracking'
+ end
+
+ context 'with invalid external_url' do
+ let_it_be(:external_url) { nil }
+
+ it_behaves_like 'no event tracking'
+ end
+ end
+
+ context 'with existing setting' do
+ let_it_be(:existing_setting) do
+ create(:project_tracing_setting,
+ project: project,
+ external_url: external_url)
+ end
+
+ context 'when changing external_url' do
+ let_it_be(:external_url) { 'https://example.com' }
+
+ it_behaves_like 'no event tracking'
+ end
+
+ context 'with unchanged external_url' do
+ it_behaves_like 'no event tracking'
+ end
+
+ context 'with invalid external_url' do
+ let_it_be(:external_url) { nil }
+
+ it_behaves_like 'no event tracking'
+ end
+ end
+ end
+ end
+ end
+
private
def project_params(project, params = {})