Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-03-18 23:02:30 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-03-18 23:02:30 +0300
commit41fe97390ceddf945f3d967b8fdb3de4c66b7dea (patch)
tree9c8d89a8624828992f06d892cd2f43818ff5dcc8 /spec/lib/gitlab/email
parent0804d2dc31052fb45a1efecedc8e06ce9bc32862 (diff)
Add latest changes from gitlab-org/gitlab@14-9-stable-eev14.9.0-rc42
Diffstat (limited to 'spec/lib/gitlab/email')
-rw-r--r--spec/lib/gitlab/email/attachment_uploader_spec.rb24
-rw-r--r--spec/lib/gitlab/email/handler/create_issue_handler_spec.rb31
-rw-r--r--spec/lib/gitlab/email/handler/service_desk_handler_spec.rb15
-rw-r--r--spec/lib/gitlab/email/receiver_spec.rb34
4 files changed, 69 insertions, 35 deletions
diff --git a/spec/lib/gitlab/email/attachment_uploader_spec.rb b/spec/lib/gitlab/email/attachment_uploader_spec.rb
index 4b4e671f001..40b94df6ee3 100644
--- a/spec/lib/gitlab/email/attachment_uploader_spec.rb
+++ b/spec/lib/gitlab/email/attachment_uploader_spec.rb
@@ -8,7 +8,27 @@ RSpec.describe Gitlab::Email::AttachmentUploader do
let(:message_raw) { fixture_file("emails/attachment.eml") }
let(:message) { Mail::Message.new(message_raw) }
+ before do
+ allow_next_instance_of(Gitlab::Sanitizers::Exif) do |instance|
+ allow(instance).to receive(:clean_existing_path).and_call_original
+ end
+ end
+
+ def expect_exif_sanitizer_called
+ expect_next_instance_of(Gitlab::Sanitizers::Exif) do |sanitizer|
+ expect(sanitizer).to receive(:clean_existing_path) do |path, **options|
+ expect(File.exist?(path)).to be true
+
+ file = File.open(path, "rb")
+ expect(options).to eql(content: file.read, skip_unallowed_types: true)
+ file.close
+ end
+ end
+ end
+
it "uploads all attachments and returns their links" do
+ expect_exif_sanitizer_called
+
links = described_class.new(message).execute(upload_parent: project, uploader_class: FileUploader)
link = links.first
@@ -21,6 +41,8 @@ RSpec.describe Gitlab::Email::AttachmentUploader do
let(:message_raw) { fixture_file("emails/valid_reply_signed_smime.eml") }
it 'uploads all attachments except the signature' do
+ expect_exif_sanitizer_called
+
links = described_class.new(message).execute(upload_parent: project, uploader_class: FileUploader)
expect(links).not_to include(a_hash_including(alt: 'smime.p7s'))
@@ -36,6 +58,8 @@ RSpec.describe Gitlab::Email::AttachmentUploader do
let(:message_raw) { fixture_file("emails/valid_reply_signed_smime_mixed_protocol_prefix.eml") }
it 'uploads all attachments except the signature' do
+ expect_exif_sanitizer_called
+
links = described_class.new(message).execute(upload_parent: project, uploader_class: FileUploader)
expect(links).not_to include(a_hash_including(alt: 'smime.p7s'))
diff --git a/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb b/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb
index 10098a66ae9..75538baf07f 100644
--- a/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb
+++ b/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb
@@ -148,34 +148,11 @@ RSpec.describe Gitlab::Email::Handler::CreateIssueHandler do
end
end
- context 'rate limiting' do
- let(:rate_limited_service_feature_enabled) { nil }
+ it 'raises a RateLimitedService::RateLimitedError' do
+ allow(::Gitlab::ApplicationRateLimiter).to receive(:throttled?).and_return(true)
- before do
- stub_feature_flags(rate_limited_service_issues_create: rate_limited_service_feature_enabled)
- end
-
- context 'when :rate_limited_service Feature is disabled' do
- let(:rate_limited_service_feature_enabled) { false }
-
- it 'does not attempt to throttle' do
- expect(::Gitlab::ApplicationRateLimiter).not_to receive(:throttled?)
-
- setup_attachment
- receiver.execute
- end
- end
-
- context 'when :rate_limited_service Feature is enabled' do
- let(:rate_limited_service_feature_enabled) { true }
-
- it 'raises a RateLimitedService::RateLimitedError' do
- allow(::Gitlab::ApplicationRateLimiter).to receive(:throttled?).and_return(true)
-
- setup_attachment
- expect { receiver.execute }.to raise_error(RateLimitedService::RateLimitedError, _('This endpoint has been requested too many times. Try again later.'))
- end
- end
+ setup_attachment
+ expect { receiver.execute }.to raise_error(RateLimitedService::RateLimitedError, _('This endpoint has been requested too many times. Try again later.'))
end
end
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 7c34fb1a926..913e197708f 100644
--- a/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb
+++ b/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb
@@ -382,7 +382,6 @@ RSpec.describe Gitlab::Email::Handler::ServiceDeskHandler do
subject { 2.times { receiver.execute } }
before do
- stub_feature_flags(rate_limited_service_issues_create: true)
stub_application_setting(issues_create_limit: 1)
end
@@ -478,6 +477,20 @@ RSpec.describe Gitlab::Email::Handler::ServiceDeskHandler do
end
end
+ context 'when there is a reply-to address and a from address' do
+ let(:email_raw) { email_fixture('emails/service_desk_reply_to_and_from.eml') }
+
+ it 'shows both from and reply-to addresses in the issue header' do
+ setup_attachment
+
+ expect { receiver.execute }.to change { Issue.count }.by(1)
+
+ new_issue = Issue.last
+
+ expect(new_issue.external_author).to eq('finn@adventuretime.ooo (reply to: marceline@adventuretime.ooo)')
+ end
+ end
+
context 'when service desk is not enabled for project' do
before do
allow(Gitlab::ServiceDesk).to receive(:enabled?).and_return(false)
diff --git a/spec/lib/gitlab/email/receiver_spec.rb b/spec/lib/gitlab/email/receiver_spec.rb
index b1a04f0592a..9040731d8fd 100644
--- a/spec/lib/gitlab/email/receiver_spec.rb
+++ b/spec/lib/gitlab/email/receiver_spec.rb
@@ -32,12 +32,21 @@ RSpec.describe Gitlab::Email::Receiver do
metadata = receiver.mail_metadata
- expect(metadata.keys).to match_array(%i(mail_uid from_address to_address mail_key references delivered_to envelope_to x_envelope_to meta))
+ expect(metadata.keys).to match_array(%i(mail_uid from_address to_address mail_key references delivered_to envelope_to x_envelope_to meta received_recipients))
expect(metadata[:meta]).to include(client_id: 'email/jake@example.com', project: project.full_path)
expect(metadata[meta_key]).to eq(meta_value)
end
end
+ shared_examples 'failed receive' do
+ it 'adds metric event' do
+ expect(::Gitlab::Metrics::BackgroundTransaction).to receive(:current).and_return(metric_transaction)
+ expect(metric_transaction).to receive(:add_event).with('email_receiver_error', { error: expected_error.name })
+
+ expect { receiver.execute }.to raise_error(expected_error)
+ end
+ end
+
context 'when the email contains a valid email address in a header' do
before do
stub_incoming_email_setting(enabled: true, address: "incoming+%{key}@appmail.example.com")
@@ -74,14 +83,25 @@ RSpec.describe Gitlab::Email::Receiver do
it_behaves_like 'successful receive'
end
- end
- shared_examples 'failed receive' do
- it 'adds metric event' do
- expect(::Gitlab::Metrics::BackgroundTransaction).to receive(:current).and_return(metric_transaction)
- expect(metric_transaction).to receive(:add_event).with('email_receiver_error', { error: expected_error.name })
+ context 'when all other headers are missing' do
+ let(:email_raw) { fixture_file('emails/missing_delivered_to_header.eml') }
+ let(:meta_key) { :received_recipients }
+ let(:meta_value) { ['incoming+gitlabhq/gitlabhq+auth_token@appmail.example.com', 'incoming+gitlabhq/gitlabhq@example.com'] }
- expect { receiver.execute }.to raise_error(expected_error)
+ context 'when use_received_header_for_incoming_emails is enabled' do
+ it_behaves_like 'successful receive'
+ end
+
+ context 'when use_received_header_for_incoming_emails is disabled' do
+ let(:expected_error) { Gitlab::Email::UnknownIncomingEmail }
+
+ before do
+ stub_feature_flags(use_received_header_for_incoming_emails: false)
+ end
+
+ it_behaves_like 'failed receive'
+ end
end
end