Don't send rejection mails for all auto-generated mails

Also make it easier to have mailer helper
This commit is contained in:
Lin Jen-Shin 2017-08-02 23:13:27 +08:00
parent 8ec089f332
commit f097e4dbcd
8 changed files with 42 additions and 26 deletions

View file

@ -31,8 +31,6 @@ class EmailReceiverWorker
when Gitlab::Email::EmptyEmailError
can_retry = true
"It appears that the email is blank. Make sure your reply is at the top of the email, we can't process inline replies."
when Gitlab::Email::AutoGeneratedEmailError
"The email was marked as 'auto generated', which we can't accept. Please create your comment through the web interface."
when Gitlab::Email::UserNotFoundError
"We couldn't figure out what user corresponds to the email. Please create your comment through the web interface."
when Gitlab::Email::UserBlockedError

View file

@ -0,0 +1,4 @@
---
title: Don't send rejection mails for all auto-generated mails
merge_request: 13254
author:

View file

@ -15,7 +15,6 @@ module Gitlab
def execute
raise SentNotificationNotFoundError unless sent_notification
raise AutoGeneratedEmailError if mail.header.to_s =~ /auto-(generated|replied)/
validate_permission!(:create_note)

View file

@ -26,6 +26,10 @@ module Gitlab
raise EmptyEmailError if @raw.blank?
mail = build_mail
raise AutoGeneratedEmailError if
mail.header.to_s =~ /auto-(generated|replied)/
mail_key = extract_mail_key(mail)
handler = Handler.for(mail, mail_key)

View file

@ -36,15 +36,6 @@ describe Gitlab::Email::Handler::CreateNoteHandler do
end
end
context "when the email was auto generated" do
let!(:mail_key) { '636ca428858779856c226bb145ef4fad' }
let!(:email_raw) { fixture_file("emails/auto_reply.eml") }
it "raises an AutoGeneratedEmailError" do
expect { receiver.execute }.to raise_error(Gitlab::Email::AutoGeneratedEmailError)
end
end
context "when the noteable could not be found" do
before do
noteable.destroy

View file

@ -28,14 +28,6 @@ describe Gitlab::Email::Receiver do
it "raises an UnknownIncomingEmail error" do
expect { receiver.execute }.to raise_error(Gitlab::Email::UnknownIncomingEmail)
end
context "and the email contains no references header" do
let(:email_raw) { fixture_file("emails/auto_reply.eml").gsub(mail_key, "!!!") }
it "raises an UnknownIncomingEmail error" do
expect { receiver.execute }.to raise_error(Gitlab::Email::UnknownIncomingEmail)
end
end
end
context "when the email is blank" do
@ -45,4 +37,12 @@ describe Gitlab::Email::Receiver do
expect { receiver.execute }.to raise_error(Gitlab::Email::EmptyEmailError)
end
end
context "when the email was auto generated" do
let(:email_raw) { fixture_file("emails/auto_reply.eml") }
it "raises an AutoGeneratedEmailError" do
expect { receiver.execute }.to raise_error(Gitlab::Email::AutoGeneratedEmailError)
end
end
end

View file

@ -49,7 +49,7 @@ RSpec.configure do |config|
config.include SearchHelpers, type: :feature
config.include WaitForRequests, :js
config.include StubConfiguration
config.include EmailHelpers, type: :mailer
config.include EmailHelpers, :mailer, type: :mailer
config.include TestEnv
config.include ActiveJob::TestHelper
config.include ActiveSupport::Testing::TimeHelpers
@ -93,6 +93,10 @@ RSpec.configure do |config|
RequestStore.clear!
end
config.before(:example, :mailer) do
reset_delivered_emails!
end
if ENV['CI']
config.around(:each) do |ex|
ex.run_with_retry retry: 2

View file

@ -1,6 +1,6 @@
require "spec_helper"
describe EmailReceiverWorker do
describe EmailReceiverWorker, :mailer do
let(:raw_message) { fixture_file('emails/valid_reply.eml') }
context "when reply by email is enabled" do
@ -17,12 +17,16 @@ describe EmailReceiverWorker do
context "when an error occurs" do
before do
allow_any_instance_of(Gitlab::Email::Receiver).to receive(:execute).and_raise(Gitlab::Email::EmptyEmailError)
allow_any_instance_of(Gitlab::Email::Receiver).to receive(:execute).and_raise(error)
end
it "sends out a rejection email" do
perform_enqueued_jobs do
described_class.new.perform(raw_message)
context 'when the error is Gitlab::Email::EmptyEmailError' do
let(:error) { Gitlab::Email::EmptyEmailError }
it 'sends out a rejection email' do
perform_enqueued_jobs do
described_class.new.perform(raw_message)
end
email = ActionMailer::Base.deliveries.last
expect(email).not_to be_nil
@ -30,6 +34,18 @@ describe EmailReceiverWorker do
expect(email.subject).to include("Rejected")
end
end
context 'when the error is Gitlab::Email::AutoGeneratedEmailError' do
let(:error) { Gitlab::Email::AutoGeneratedEmailError }
it 'does not send out any rejection email' do
perform_enqueued_jobs do
described_class.new.perform(raw_message)
end
should_not_email_anyone
end
end
end
end