discourse/spec/jobs/poll_mailbox_spec.rb

105 lines
2.9 KiB
Ruby

require 'rails_helper'
require_dependency 'jobs/regular/process_post'
describe Jobs::PollMailbox do
let(:poller) { Jobs::PollMailbox.new }
describe ".execute" do
it "does no polling if pop3_polling_enabled is false" do
SiteSetting.expects(:pop3_polling_enabled).returns(false)
poller.expects(:poll_pop3).never
poller.execute({})
end
it "polls when pop3_polling_enabled is true" do
SiteSetting.expects(:pop3_polling_enabled).returns(true)
poller.expects(:poll_pop3).once
poller.execute({})
end
end
describe ".poll_pop3" do
context "pop errors" do
let(:user) { Fabricate(:user) }
before do
Discourse.expects(:handle_job_exception).at_least_once
end
after do
$redis.del(Jobs::PollMailbox::POLL_MAILBOX_TIMEOUT_ERROR_KEY)
end
it "add an admin dashboard message on pop authentication error" do
Net::POP3.any_instance.expects(:start)
.raises(Net::POPAuthenticationError.new).at_least_once
poller.poll_pop3
i18n_key = 'dashboard.poll_pop3_auth_error'
expect(AdminDashboardData.problem_message_check(i18n_key))
.to eq(I18n.t(i18n_key))
end
it "logs an error on pop connection timeout error" do
Net::POP3.any_instance.expects(:start).raises(Net::OpenTimeout.new).at_least_once
4.times { poller.poll_pop3 }
i18n_key = 'dashboard.poll_pop3_timeout'
expect(AdminDashboardData.problem_message_check(i18n_key))
.to eq(I18n.t(i18n_key))
end
end
it "calls enable_ssl when the setting is enabled" do
SiteSetting.pop3_polling_ssl = true
Net::POP3.any_instance.stubs(:start)
Net::POP3.any_instance.expects(:enable_ssl)
poller.poll_pop3
end
it "does not call enable_ssl when the setting is disabled" do
SiteSetting.pop3_polling_ssl = false
Net::POP3.any_instance.stubs(:start)
Net::POP3.any_instance.expects(:enable_ssl).never
poller.poll_pop3
end
end
describe "#process_popmail" do
def process_popmail(email_name)
pop_mail = stub("pop mail")
pop_mail.expects(:pop).returns(email(email_name))
Jobs::PollMailbox.new.process_popmail(pop_mail)
end
it "does not reply to a bounced email" do
expect { process_popmail(:bounced_email) }.to_not change { ActionMailer::Base.deliveries.count }
incoming_email = IncomingEmail.last
expect(incoming_email.rejection_message).to eq(
I18n.t("emails.incoming.errors.bounced_email_error")
)
end
it "does not reply to an email containing a reply to an auto generated email" do
expect { process_popmail(:bounced_email_2) }.to_not change { ActionMailer::Base.deliveries.count }
incoming_email = IncomingEmail.last
expect(incoming_email.rejection_message).to eq(
I18n.t("emails.incoming.errors.auto_generated_email_reply")
)
end
end
end