diff --git a/lib/email/processor.rb b/lib/email/processor.rb index da1c39e04fe..ad43efeda92 100644 --- a/lib/email/processor.rb +++ b/lib/email/processor.rb @@ -1,6 +1,7 @@ module Email class Processor + attr_reader :receiver def initialize(mail, retry_on_rate_limit = true) @mail = mail diff --git a/spec/components/email/processor_spec.rb b/spec/components/email/processor_spec.rb index 1cec58aca00..0a0a0c7b4cc 100644 --- a/spec/components/email/processor_spec.rb +++ b/spec/components/email/processor_spec.rb @@ -2,44 +2,40 @@ require "rails_helper" require "email/processor" describe Email::Processor do + after do + $redis.flushall + end let(:from) { "foo@bar.com" } context "when reply via email is too short" do - let(:mail) { file_from_fixtures("email_reply_3.eml", "emails").read } + let(:mail) { file_from_fixtures("chinese_reply.eml", "emails").read } let(:post) { Fabricate(:post) } - let!(:user) { Fabricate(:user, email: "three@foo.com") } - let!(:email_log) do - Fabricate(:email_log, - message_id: "35@foo.bar.mail", # don't change, based on fixture file "email_reply_3.eml" - email_type: "user_posted", - post_id: post.id, - to_address: "asdas@dasdfd.com" + let(:user) { Fabricate(:user, email: 'discourse@bar.com') } + + let!(:post_reply_key) do + Fabricate(:post_reply_key, + user: user, + post: post, + reply_key: '4f97315cc828096c9cb34c6f1a0d6fe8' ) end before do + SiteSetting.email_in = true + SiteSetting.reply_by_email_address = "reply+%{reply_key}@bar.com" SiteSetting.min_post_length = 1000 - SiteSetting.find_related_post_with_key = false end it "rejects reply and sends an email with custom error message" do - begin - receiver = Email::Receiver.new(mail) - receiver.process! - rescue Email::Receiver::TooShortPost => e - error = e - end - - expect(error.class).to eq(Email::Receiver::TooShortPost) processor = Email::Processor.new(mail) processor.process! - rejection_raw = processor.send(:handle_failure, mail, error).body.raw_source + rejection_raw = ActionMailer::Base.deliveries.first.body.raw_source count = SiteSetting.min_post_length - destination = receiver.mail.to - former_title = receiver.mail.subject + destination = processor.receiver.mail.to + former_title = processor.receiver.mail.subject expect(rejection_raw.gsub(/\r/, "")).to eq( I18n.t("system_messages.email_reject_post_too_short.text_body_template", diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 0bd62cd22b0..b267a16e0ef 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -133,6 +133,7 @@ RSpec.configure do |config| end unfreeze_time + ActionMailer::Base.deliveries.clear raise if ActiveRecord::Base.connection_pool.stat[:busy] > 1 end