diff options
Diffstat (limited to 'spec/controllers/projects/settings/operations_controller_spec.rb')
-rw-r--r-- | spec/controllers/projects/settings/operations_controller_spec.rb | 115 |
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 = {}) |