diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-16 00:08:49 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-16 00:08:49 +0300 |
commit | cf1d4237a4f226ba2deed26240544da0675a41e5 (patch) | |
tree | 926a71b9279659bc52db0187b463603934718bf2 /spec | |
parent | 0ac82f99553ce12009970a14c0afc02d1f6515bb (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
13 files changed, 548 insertions, 47 deletions
diff --git a/spec/controllers/projects/settings/operations_controller_spec.rb b/spec/controllers/projects/settings/operations_controller_spec.rb index 0a2cc6f6aa5..62b906e8507 100644 --- a/spec/controllers/projects/settings/operations_controller_spec.rb +++ b/spec/controllers/projects/settings/operations_controller_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' describe Projects::Settings::OperationsController do let_it_be(:user) { create(:user) } - let_it_be(:project) { create(:project) } + let_it_be(:project, reload: true) { create(:project) } before do sign_in(user) @@ -121,6 +121,74 @@ describe Projects::Settings::OperationsController do end end + context 'incident management' do + describe 'GET #show' do + context 'with existing setting' do + let!(:incident_management_setting) do + create(:project_incident_management_setting, project: project) + end + + it 'loads existing setting' do + get :show, params: project_params(project) + + expect(controller.helpers.project_incident_management_setting) + .to eq(incident_management_setting) + end + end + + context 'without an existing setting' do + it 'builds a new setting' do + get :show, params: project_params(project) + + expect(controller.helpers.project_incident_management_setting).to be_new_record + end + end + end + + describe 'PATCH #update' do + let(:params) do + { + incident_management_setting_attributes: { + create_issue: 'false', + send_email: 'false', + issue_template_key: 'some-other-template' + } + } + end + + it_behaves_like 'PATCHable' + + context 'updating each incident management setting' do + let(:project) { create(:project) } + 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 + + expect(Gitlab::Tracking).to receive(:event) + .with('IncidentManagement::Settings', event_key, kind_of(Hash)) + + patch :update, params: project_params(project, incident_management_setting_attributes: new_incident_management_settings) + + project.reload + end + end + + it_behaves_like 'a gitlab tracking event', { create_issue: '1' }, 'enabled_issue_auto_creation_on_alerts' + it_behaves_like 'a gitlab tracking event', { create_issue: '0' }, 'disabled_issue_auto_creation_on_alerts' + it_behaves_like 'a gitlab tracking event', { issue_template_key: 'template' }, 'enabled_issue_template_on_alerts' + it_behaves_like 'a gitlab tracking event', { issue_template_key: nil }, 'disabled_issue_template_on_alerts' + it_behaves_like 'a gitlab tracking event', { send_email: '1' }, 'enabled_sending_emails' + it_behaves_like 'a gitlab tracking event', { send_email: '0' }, 'disabled_sending_emails' + end + end + end + context 'error tracking' do describe 'GET #show' do context 'with existing setting' do diff --git a/spec/features/projects/services/user_activates_alerts_spec.rb b/spec/features/projects/services/user_activates_alerts_spec.rb new file mode 100644 index 00000000000..47de7fab859 --- /dev/null +++ b/spec/features/projects/services/user_activates_alerts_spec.rb @@ -0,0 +1,81 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'User activates Alerts', :js do + let_it_be(:project) { create(:project) } + let_it_be(:user) { create(:user) } + + let(:service_name) { 'alerts' } + let(:service_title) { 'Alerts endpoint' } + + before do + sign_in(user) + project.add_maintainer(user) + end + + context 'when service is deactivated' do + it 'activates service' do + visit_project_services + + expect(page).to have_link(service_title) + click_link(service_title) + + expect(page).not_to have_active_service + + click_activate_service + wait_for_requests + + expect(page).to have_active_service + end + end + + context 'when service is activated' do + before do + visit_alerts_service + click_activate_service + end + + it 're-generates key' do + expect(reset_key.value).to be_blank + + click_reset_key + click_confirm_reset_key + wait_for_requests + + expect(reset_key.value).to be_present + end + end + + private + + def visit_project_services + visit(project_settings_integrations_path(project)) + end + + def visit_alerts_service + visit(edit_project_service_path(project, service_name)) + end + + def click_activate_service + find('#activated').click + end + + def click_reset_key + click_button('Reset key') + end + + def click_confirm_reset_key + within '.modal-content' do + click_reset_key + end + end + + def reset_key + find_field('Authorization key') + end + + def have_active_service + have_selector('.js-service-active-status[data-value="true"]') + end +end diff --git a/spec/features/projects/settings/operations_settings_spec.rb b/spec/features/projects/settings/operations_settings_spec.rb index 72e2865dd6a..0181ceed5b9 100644 --- a/spec/features/projects/settings/operations_settings_spec.rb +++ b/spec/features/projects/settings/operations_settings_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' describe 'Projects > Settings > For a forked project', :js do let(:user) { create(:user) } - let(:project) { create(:project, :repository) } + let(:project) { create(:project, :repository, create_templates: :issue) } let(:role) { :maintainer } before do @@ -22,6 +22,54 @@ describe 'Projects > Settings > For a forked project', :js do end describe 'Settings > Operations' do + describe 'Incidents' do + let(:create_issue) { 'Create an issue. Issues are created for each alert triggered.' } + let(:send_email) { 'Send a separate email notification to Developers.' } + + before do + create(:project_incident_management_setting, send_email: true, project: project) + visit project_settings_operations_path(project) + + wait_for_requests + click_expand_incident_management_button + end + + it 'renders form for incident management' do + expect(page).to have_selector('h4', text: 'Incidents') + end + + it 'sets correct default values' do + expect(find_field(create_issue)).not_to be_checked + expect(find_field(send_email)).to be_checked + end + + it 'updates form values' do + check(create_issue) + template_select = find_field('Issue template') + template_select.find(:xpath, 'option[2]').select_option + uncheck(send_email) + + save_form + click_expand_incident_management_button + + expect(find_field(create_issue)).to be_checked + expect(page).to have_select('Issue template', selected: 'bug') + expect(find_field(send_email)).not_to be_checked + end + + def click_expand_incident_management_button + within '.js-incident-management-settings' do + click_button('Expand') + end + end + + def save_form + page.within "#edit_project_#{project.id}" do + click_on 'Save changes' + end + end + end + context 'error tracking settings form' do let(:sentry_list_projects_url) { 'http://sentry.example.com/api/0/projects/' } diff --git a/spec/frontend/alerts_service_settings/components/__snapshots__/alerts_service_form_spec.js.snap b/spec/frontend/alerts_service_settings/components/__snapshots__/alerts_service_form_spec.js.snap new file mode 100644 index 00000000000..36ec0badade --- /dev/null +++ b/spec/frontend/alerts_service_settings/components/__snapshots__/alerts_service_form_spec.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AlertsServiceForm with default values renders "authorization-key" input 1`] = `"<gl-form-input-stub id=\\"authorization-key\\" readonly=\\"true\\" value=\\"abcedfg123\\"></gl-form-input-stub>"`; + +exports[`AlertsServiceForm with default values renders "url" input 1`] = `"<gl-form-input-stub id=\\"url\\" readonly=\\"true\\" value=\\"https://gitlab.com/endpoint-url\\"></gl-form-input-stub>"`; + +exports[`AlertsServiceForm with default values renders toggle button 1`] = `"<toggle-button-stub id=\\"activated\\"></toggle-button-stub>"`; + +exports[`AlertsServiceForm with default values shows description and "Learn More" link 1`] = `"Each alert source must be authorized using the following URL and authorization key. <a href=\\"https://docs.gitlab.com/ee/user/project/integrations/generic_alerts.md\\" target=\\"_blank\\" rel=\\"noopener noreferrer\\">Learn more</a> about configuring this endpoint to receive alerts."`; diff --git a/spec/frontend/alerts_service_settings/components/alerts_service_form_spec.js b/spec/frontend/alerts_service_settings/components/alerts_service_form_spec.js new file mode 100644 index 00000000000..b7a008c78d0 --- /dev/null +++ b/spec/frontend/alerts_service_settings/components/alerts_service_form_spec.js @@ -0,0 +1,168 @@ +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; +import { shallowMount } from '@vue/test-utils'; +import { GlModal } from '@gitlab/ui'; +import AlertsServiceForm from '~/alerts_service_settings/components/alerts_service_form.vue'; +import ToggleButton from '~/vue_shared/components/toggle_button.vue'; +import createFlash from '~/flash'; + +jest.mock('~/flash'); + +const defaultProps = { + initialAuthorizationKey: 'abcedfg123', + formPath: 'http://invalid', + url: 'https://gitlab.com/endpoint-url', + learnMoreUrl: 'https://docs.gitlab.com/ee/user/project/integrations/generic_alerts.md', + initialActivated: false, +}; + +describe('AlertsServiceForm', () => { + let wrapper; + let mockAxios; + + const createComponent = (props = defaultProps, { methods } = {}) => { + wrapper = shallowMount(AlertsServiceForm, { + propsData: { + ...defaultProps, + ...props, + }, + methods, + }); + }; + + const findUrl = () => wrapper.find('#url'); + const findAuthorizationKey = () => wrapper.find('#authorization-key'); + const findDescription = () => wrapper.find('p'); + const findActiveStatusIcon = val => + document.querySelector(`.js-service-active-status[data-value=${val.toString()}]`); + + beforeEach(() => { + mockAxios = new MockAdapter(axios); + setFixtures(` + <div> + <span class="js-service-active-status fa fa-circle" data-value="true"></span> + <span class="js-service-active-status fa fa-power-off" data-value="false"></span> + </div>`); + }); + + afterEach(() => { + wrapper.destroy(); + mockAxios.restore(); + }); + + describe('with default values', () => { + beforeEach(() => { + createComponent(); + }); + + it('renders "url" input', () => { + expect(findUrl().html()).toMatchSnapshot(); + }); + + it('renders "authorization-key" input', () => { + expect(findAuthorizationKey().html()).toMatchSnapshot(); + }); + + it('renders toggle button', () => { + expect(wrapper.find(ToggleButton).html()).toMatchSnapshot(); + }); + + it('shows description and "Learn More" link', () => { + expect(findDescription().element.innerHTML).toMatchSnapshot(); + }); + }); + + describe('reset key', () => { + it('triggers resetKey method', () => { + const resetKey = jest.fn(); + const methods = { resetKey }; + createComponent(defaultProps, { methods }); + + wrapper.find(GlModal).vm.$emit('ok'); + + expect(resetKey).toHaveBeenCalled(); + }); + + it('updates the authorization key on success', () => { + const formPath = 'some/path'; + mockAxios.onPut(formPath, { service: { token: '' } }).replyOnce(200, { token: 'newToken' }); + + createComponent({ formPath }); + + return wrapper.vm.resetKey().then(() => { + expect(findAuthorizationKey().attributes('value')).toBe('newToken'); + }); + }); + + it('shows flash message on error', () => { + const formPath = 'some/path'; + mockAxios.onPut(formPath).replyOnce(404); + + createComponent({ formPath }); + + return wrapper.vm.resetKey().then(() => { + expect(findAuthorizationKey().attributes('value')).toBe( + defaultProps.initialAuthorizationKey, + ); + expect(createFlash).toHaveBeenCalled(); + }); + }); + }); + + describe('activate toggle', () => { + it('triggers toggleActivated method', () => { + const toggleActivated = jest.fn(); + const methods = { toggleActivated }; + createComponent(defaultProps, { methods }); + + wrapper.find(ToggleButton).vm.$emit('change', true); + + expect(toggleActivated).toHaveBeenCalled(); + }); + + describe('successfully completes', () => { + describe.each` + initialActivated | value + ${false} | ${true} + ${true} | ${false} + `( + 'when initialActivated=$initialActivated and value=$value', + ({ initialActivated, value }) => { + beforeEach(() => { + const formPath = 'some/path'; + mockAxios + .onPut(formPath, { service: { active: value } }) + .replyOnce(200, { active: value }); + createComponent({ initialActivated, formPath }); + + return wrapper.vm.toggleActivated(value); + }); + + it(`updates toggle button value to ${value}`, () => { + expect(wrapper.find(ToggleButton).props('value')).toBe(value); + }); + + it('updates visible status icons', () => { + expect(findActiveStatusIcon(!value)).toHaveClass('d-none'); + expect(findActiveStatusIcon(value)).not.toHaveClass('d-none'); + }); + }, + ); + }); + + describe('error is encountered', () => { + beforeEach(() => { + const formPath = 'some/path'; + mockAxios.onPut(formPath).replyOnce(500); + }); + + it('restores previous value', () => { + createComponent({ initialActivated: false }); + + return wrapper.vm.toggleActivated(true).then(() => { + expect(wrapper.find(ToggleButton).props('value')).toBe(false); + }); + }); + }); + }); +}); diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index d61289dabb6..37bc2b382cb 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -5,6 +5,37 @@ require 'spec_helper' describe ProjectsHelper do include ProjectForksHelper + describe '#project_incident_management_setting' do + let(:project) { create(:project) } + + before do + helper.instance_variable_set(:@project, project) + end + + context 'when incident_management_setting exists' do + let(:project_incident_management_setting) do + create(:project_incident_management_setting, project: project) + end + + it 'return project_incident_management_setting' do + expect(helper.project_incident_management_setting).to( + eq(project_incident_management_setting) + ) + end + end + + context 'when incident_management_setting does not exist' do + it 'builds incident_management_setting' do + setting = helper.project_incident_management_setting + + expect(setting).not_to be_persisted + expect(setting.send_email).to be_falsey + expect(setting.create_issue).to be_truthy + expect(setting.issue_template_key).to be_nil + end + end + end + describe '#error_tracking_setting_project_json' do let(:project) { create(:project) } diff --git a/spec/javascripts/ide/lib/editor_spec.js b/spec/javascripts/ide/lib/editor_spec.js index f1973f7798f..556bd45d3a5 100644 --- a/spec/javascripts/ide/lib/editor_spec.js +++ b/spec/javascripts/ide/lib/editor_spec.js @@ -74,6 +74,7 @@ describe('Multi-file editor library', () => { renderSideBySide: true, renderLineHighlight: 'all', hideCursorInOverviewRuler: false, + theme: 'vs white', }); }); }); diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 9a49d334f52..3f7e412e80b 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -22,6 +22,10 @@ describe Gitlab::UsageData do create(:service, project: projects[2], type: 'CustomIssueTrackerService', active: true) create(:project_error_tracking_setting, project: projects[0]) create(:project_error_tracking_setting, project: projects[1], enabled: false) + create(:alerts_service, project: projects[0]) + create(:alerts_service, :inactive, project: projects[1]) + create_list(:issue, 2, project: projects[0], author: User.alert_bot) + create_list(:issue, 2, project: projects[1], author: User.alert_bot) create_list(:issue, 4, project: projects[0]) create(:zoom_meeting, project: projects[0], issue: projects[0].issues[0], issue_status: :added) create_list(:zoom_meeting, 2, project: projects[0], issue: projects[0].issues[1], issue_status: :removed) @@ -159,6 +163,7 @@ describe Gitlab::UsageData do issues_with_associated_zoom_link issues_using_zoom_quick_actions issues_with_embedded_grafana_charts_approx + incident_issues keys label_lists labels @@ -183,6 +188,7 @@ describe Gitlab::UsageData do projects_prometheus_active projects_with_repositories_enabled projects_with_error_tracking_enabled + projects_with_alerts_service_enabled pages_domains protected_branches releases @@ -220,10 +226,12 @@ describe Gitlab::UsageData do expect(count_data[:projects_mattermost_active]).to eq(0) expect(count_data[:projects_with_repositories_enabled]).to eq(3) expect(count_data[:projects_with_error_tracking_enabled]).to eq(1) + expect(count_data[:projects_with_alerts_service_enabled]).to eq(1) expect(count_data[:issues_created_from_gitlab_error_tracking_ui]).to eq(1) expect(count_data[:issues_with_associated_zoom_link]).to eq(2) expect(count_data[:issues_using_zoom_quick_actions]).to eq(3) expect(count_data[:issues_with_embedded_grafana_charts_approx]).to eq(2) + expect(count_data[:incident_issues]).to eq(4) expect(count_data[:clusters_enabled]).to eq(4) expect(count_data[:project_clusters_enabled]).to eq(3) diff --git a/spec/models/error_tracking/project_error_tracking_setting_spec.rb b/spec/models/error_tracking/project_error_tracking_setting_spec.rb index 41630c71f21..e81480ab88f 100644 --- a/spec/models/error_tracking/project_error_tracking_setting_spec.rb +++ b/spec/models/error_tracking/project_error_tracking_setting_spec.rb @@ -19,6 +19,19 @@ describe ErrorTracking::ProjectErrorTrackingSetting do it { is_expected.to allow_value("http://gitlab.com/api/0/projects/project1/something").for(:api_url) } it { is_expected.not_to allow_values("http://gitlab.com/api/0/projects/project1/something€").for(:api_url) } + it 'disallows non-booleans in enabled column' do + is_expected.not_to allow_value( + nil + ).for(:enabled) + end + + it 'allows booleans in enabled column' do + is_expected.to allow_value( + true, + false + ).for(:enabled) + end + it 'rejects invalid api_urls' do is_expected.not_to allow_values( "https://replaceme.com/'><script>alert(document.cookie)</script>", # unsafe diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index b3d8ac83075..dc055244af7 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -5607,7 +5607,21 @@ describe Project do subject { project.alerts_service_activated? } - it { is_expected.to be_falsey } + context 'when project has an activated alerts service' do + before do + create(:alerts_service, project: project) + end + + it { is_expected.to be_truthy } + end + + context 'when project has an inactive alerts service' do + before do + create(:alerts_service, :inactive, project: project) + end + + it { is_expected.to be_falsey } + end end describe '#self_monitoring?' do diff --git a/spec/requests/api/error_tracking_spec.rb b/spec/requests/api/error_tracking_spec.rb index 059744898b8..120248bdbc6 100644 --- a/spec/requests/api/error_tracking_spec.rb +++ b/spec/requests/api/error_tracking_spec.rb @@ -3,13 +3,13 @@ require 'spec_helper' describe API::ErrorTracking do - let(:user) { create(:user) } + let_it_be(:user) { create(:user) } let(:setting) { create(:project_error_tracking_setting) } let(:project) { setting.project } shared_examples 'returns project settings' do it 'returns correct project settings' do - subject + make_request expect(response).to have_gitlab_http_status(:ok) expect(json_response).to eq( @@ -23,7 +23,7 @@ describe API::ErrorTracking do shared_examples 'returns 404' do it 'returns correct project settings' do - subject + make_request expect(response).to have_gitlab_http_status(:not_found) expect(json_response['message']) @@ -32,7 +32,9 @@ describe API::ErrorTracking do end describe "PATCH /projects/:id/error_tracking/settings" do - def make_patch_request(**params) + let(:params) { { active: false } } + + def make_request patch api("/projects/#{project.id}/error_tracking/settings", user), params: params end @@ -42,26 +44,39 @@ describe API::ErrorTracking do end context 'patch settings' do - subject do - make_patch_request(active: false) + it_behaves_like 'returns project settings' + + it 'updates enabled flag' do + expect(setting).to be_enabled + + make_request + + expect(json_response).to include('active' => false) + expect(setting.reload).not_to be_enabled end - it_behaves_like 'returns project settings' + context 'active is invalid' do + let(:params) { { active: "randomstring" } } - it 'returns active is invalid if non boolean' do - make_patch_request(active: "randomstring") + it 'returns active is invalid if non boolean' do + make_request - expect(response).to have_gitlab_http_status(:bad_request) - expect(json_response['error']) - .to eq('active is invalid') + expect(response).to have_gitlab_http_status(:bad_request) + expect(json_response['error']) + .to eq('active is invalid') + end end - it 'returns 400 if active is empty' do - make_patch_request(active: '') + context 'active is empty' do + let(:params) { { active: '' } } + + it 'returns 400' do + make_request - expect(response).to have_gitlab_http_status(:bad_request) - expect(json_response['error']) - .to eq('active is empty') + expect(response).to have_gitlab_http_status(:bad_request) + expect(json_response['error']) + .to eq('active is empty') + end end end @@ -73,10 +88,6 @@ describe API::ErrorTracking do end context 'patch settings' do - subject do - make_patch_request(active: true) - end - it_behaves_like 'returns 404' end end @@ -87,10 +98,12 @@ describe API::ErrorTracking do project.add_reporter(user) end - it 'returns 403 for update request' do - make_patch_request(active: true) + context 'patch request' do + it 'returns 403' do + make_request - expect(response).to have_gitlab_http_status(:forbidden) + expect(response).to have_gitlab_http_status(:forbidden) + end end end @@ -99,28 +112,34 @@ describe API::ErrorTracking do project.add_developer(user) end - it 'returns 403 for update request' do - make_patch_request(active: true) + context 'patch request' do + it 'returns 403' do + make_request - expect(response).to have_gitlab_http_status(:forbidden) + expect(response).to have_gitlab_http_status(:forbidden) + end end end context 'when authenticated as non-member' do - it 'returns 404 for update request' do - make_patch_request(active: false) + context 'patch request' do + it 'returns 404' do + make_request - expect(response).to have_gitlab_http_status(:not_found) + expect(response).to have_gitlab_http_status(:not_found) + end end end context 'when unauthenticated' do let(:user) { nil } - it 'returns 401 for update request' do - make_patch_request(active: true) + context 'patch request' do + it 'returns 401 for update request' do + make_request - expect(response).to have_gitlab_http_status(:unauthorized) + expect(response).to have_gitlab_http_status(:unauthorized) + end end end end @@ -136,10 +155,6 @@ describe API::ErrorTracking do end context 'get settings' do - subject do - make_request - end - it_behaves_like 'returns project settings' end end @@ -152,10 +167,6 @@ describe API::ErrorTracking do end context 'get settings' do - subject do - make_request - end - it_behaves_like 'returns 404' end end diff --git a/spec/services/projects/alerting/notify_service_spec.rb b/spec/services/projects/alerting/notify_service_spec.rb index efd168a0a8a..925d323584e 100644 --- a/spec/services/projects/alerting/notify_service_spec.rb +++ b/spec/services/projects/alerting/notify_service_spec.rb @@ -5,6 +5,26 @@ require 'spec_helper' describe Projects::Alerting::NotifyService do let_it_be(:project, reload: true) { create(:project) } + before do + # We use `let_it_be(:project)` so we make sure to clear caches + project.clear_memoization(:licensed_feature_available) + end + + shared_examples 'processes incident issues' do |amount| + let(:create_incident_service) { spy } + + it 'processes issues' do + expect(IncidentManagement::ProcessAlertWorker) + .to receive(:perform_async) + .with(project.id, kind_of(Hash)) + .exactly(amount).times + + Sidekiq::Testing.inline! do + expect(subject.status).to eq(:success) + end + end + end + shared_examples 'does not process incident issues' do |http_status:| it 'does not process issues' do expect(IncidentManagement::ProcessAlertWorker) @@ -29,6 +49,36 @@ describe Projects::Alerting::NotifyService do subject { service.execute(token) } - it_behaves_like 'does not process incident issues', http_status: 403 + context 'with activated Alerts Service' do + let!(:alerts_service) { create(:alerts_service, project: project) } + + context 'with valid token' do + let(:token) { alerts_service.token } + + context 'with a valid payload' do + it_behaves_like 'processes incident issues', 1 + end + + context 'with an invalid payload' do + before do + allow(Gitlab::Alerting::NotificationPayloadParser) + .to receive(:call) + .and_raise(Gitlab::Alerting::NotificationPayloadParser::BadPayloadError) + end + + it_behaves_like 'does not process incident issues', http_status: 400 + end + end + + context 'with invalid token' do + it_behaves_like 'does not process incident issues', http_status: 401 + end + end + + context 'with deactivated Alerts Service' do + let!(:alerts_service) { create(:alerts_service, :inactive, project: project) } + + it_behaves_like 'does not process incident issues', http_status: 403 + end end end diff --git a/spec/support/shared_contexts/services_shared_context.rb b/spec/support/shared_contexts/services_shared_context.rb index c526c8aba7c..21bc0651c44 100644 --- a/spec/support/shared_contexts/services_shared_context.rb +++ b/spec/support/shared_contexts/services_shared_context.rb @@ -32,8 +32,7 @@ Service.available_services_names.each do |service| { 'github' => :github_project_service_integration, 'jenkins' => :jenkins_integration, - 'jenkins_deprecated' => :jenkins_integration, - 'alerts' => :incident_management + 'jenkins_deprecated' => :jenkins_integration } end |