diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-19 18:09:36 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-19 18:09:36 +0300 |
commit | 8bb837c4d180720d4d923ef2e7bd2c9a46ca97a0 (patch) | |
tree | 7dcb166661ba29fb6cd5935f0db34eee6c935388 /spec/lib | |
parent | eef2437c0a359ec3437d31d1b1ea959e54c71458 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib')
-rw-r--r-- | spec/lib/gitlab/email/handler/service_desk_handler_spec.rb | 119 | ||||
-rw-r--r-- | spec/lib/gitlab/metrics/environment_spec.rb | 3 |
2 files changed, 120 insertions, 2 deletions
diff --git a/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb b/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb index ef2acc9ec92..98522c53a47 100644 --- a/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb +++ b/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb @@ -381,6 +381,125 @@ RSpec.describe Gitlab::Email::Handler::ServiceDeskHandler, feature_category: :se it_behaves_like 'a new issue request' end end + + context 'when receiving a service desk custom email address verification email' do + let(:email_raw) { service_desk_fixture('emails/service_desk_custom_email_address_verification.eml') } + + shared_examples 'an early exiting handler' do + it 'does not trigger the verification process and does not add an issue' do + expect(ServiceDesk::CustomEmailVerifications::UpdateService).to receive(:execute).exactly(0).times + expect { receiver.execute }.to not_change { Issue.count } + end + end + + shared_examples 'a handler that does not verify the custom email' do |error_identifier| + it 'does not verify the custom email address' do + # project has no owner, so only notify verification triggerer + expect(Notify).to receive(:service_desk_verification_result_email).once + + receiver.execute + + expect(settings.reload.custom_email_enabled).to be false + expect(verification.reload).to have_attributes( + state: 'failed', + error: error_identifier + ) + end + end + + shared_examples 'a handler that verifies Service Desk custom email verification emails' do + it_behaves_like 'an early exiting handler' + + context 'with valid service desk settings' do + let_it_be(:user) { create(:user) } + + let!(:settings) { create(:service_desk_setting, project: project, custom_email: 'custom-support-email@example.com') } + let!(:verification) { create(:service_desk_custom_email_verification, project: project, token: 'ZROT4ZZXA-Y6', triggerer: user) } + + let(:message_delivery) { instance_double(ActionMailer::MessageDelivery) } + + before do + project.add_maintainer(user) + + allow(message_delivery).to receive(:deliver_later) + allow(Notify).to receive(:service_desk_verification_result_email).and_return(message_delivery) + end + + it 'successfully verifies the custom email address' do + # project has no owner, so only notify verification triggerer + expect(Notify).to receive(:service_desk_verification_result_email).once + + receiver.execute + + expect(settings.reload.custom_email_enabled).to be false + expect(verification.reload).to have_attributes( + state: 'finished', + error: nil + ) + end + + context 'and custom email address is not the configured subaddress of the project' do + before do + settings.update!(custom_email: 'custom-support-email@example.com') + end + + it_behaves_like 'an early exiting handler' + end + + context 'and verification tokens do not match' do + before do + verification.update!(token: 'XXXXXXXXXXXX') + end + + it_behaves_like 'a handler that does not verify the custom email', 'incorrect_token' + end + + context 'and verification email ingested too late' do + before do + verification.update!(triggered_at: ServiceDesk::CustomEmailVerification::TIMEFRAME.ago) + end + + it_behaves_like 'a handler that does not verify the custom email', 'mail_not_received_within_timeframe' + end + + context 'and from header differs from custom email address' do + before do + settings.update!(custom_email: 'different-from@example.com') + end + + it_behaves_like 'a handler that does not verify the custom email', 'incorrect_from' + end + end + + context 'when service_desk_custom_email feature flag is disabled' do + before do + stub_feature_flags(service_desk_custom_email: false) + end + + it 'does not trigger the verification process and adds an issue instead' do + expect { receiver.execute }.to change { Issue.count }.by(1) + end + end + end + + context 'when using incoming_email address' do + before do + stub_incoming_email_setting(enabled: true, address: 'support+%{key}@example.com') + end + + it_behaves_like 'a handler that verifies Service Desk custom email verification emails' + end + + context 'when using service_desk_email address' do + let(:receiver) { Gitlab::Email::ServiceDeskReceiver.new(email_raw) } + + before do + stub_service_desk_email_setting(enabled: true, address: 'support+%{key}@example.com') + end + + it_behaves_like 'a handler that verifies Service Desk custom email verification emails' + end + end end context 'when issue email creation fails' do diff --git a/spec/lib/gitlab/metrics/environment_spec.rb b/spec/lib/gitlab/metrics/environment_spec.rb index e94162e625e..4e3b1b5273e 100644 --- a/spec/lib/gitlab/metrics/environment_spec.rb +++ b/spec/lib/gitlab/metrics/environment_spec.rb @@ -1,8 +1,7 @@ # frozen_string_literal: true require 'fast_spec_helper' require 'rspec-parameterized' - -require_relative '../../../support/helpers/stub_env' +require 'gitlab/rspec/all' RSpec.describe Gitlab::Metrics::Environment, feature_category: :error_budgets do include StubENV |