discourse/spec/jobs/poll_mailbox_spec.rb

120 lines
2.8 KiB
Ruby
Raw Normal View History

require 'spec_helper'
require_dependency 'jobs/regular/process_post'
describe Jobs::PollMailbox do
2014-04-09 13:26:19 -04:00
let!(:poller) { Jobs::PollMailbox.new }
2014-04-09 13:26:19 -04:00
describe ".execute" do
it "does no polling if pop3s_polling_enabled is false" do
SiteSetting.expects(:pop3s_polling_enabled?).returns(false)
poller.expects(:poll_pop3s).never
poller.execute({})
end
describe "with pop3s_polling_enabled" do
it "calls poll_pop3s" do
SiteSetting.expects(:pop3s_polling_enabled?).returns(true)
poller.expects(:poll_pop3s).once
poller.execute({})
end
end
end
2014-04-09 13:26:19 -04:00
describe ".poll_pop3s" do
2014-06-30 18:16:16 -04:00
it "logs an error on pop authentication error" do
2014-04-09 13:26:19 -04:00
error = Net::POPAuthenticationError.new
data = { limit_once_per: 1.hour, message_params: { error: error }}
Net::POP3.expects(:start).raises(error)
2014-06-30 18:16:16 -04:00
Discourse.expects(:handle_exception)
2014-04-09 13:26:19 -04:00
poller.poll_pop3s
end
end
describe "processing email" do
let!(:receiver) { mock }
2014-06-27 15:03:07 -04:00
let!(:email_string) { <<MAIL
From: user@example.com
To: reply+32@discourse.example.net
Subject: Hi
Email As a String
MAIL
}
2014-04-09 13:26:19 -04:00
let!(:email) { mock }
before do
email.stubs(:pop).returns(email_string)
Email::Receiver.expects(:new).with(email_string).returns(receiver)
end
describe "all goes fine" do
it "email gets deleted" do
receiver.expects(:process)
email.expects(:delete)
poller.handle_mail(email)
end
end
describe "raises Untrusted error" do
it "sends a reply and deletes the email" do
receiver.expects(:process).raises(Email::Receiver::UserNotSufficientTrustLevelError)
email.expects(:delete)
2014-06-27 15:03:07 -04:00
message = Mail::Message.new(email_string)
Mail::Message.expects(:new).with(email_string).returns(message)
2014-04-09 13:26:19 -04:00
client_message = mock
2014-06-27 15:03:07 -04:00
sender_object = mock
2014-04-09 13:26:19 -04:00
2014-06-27 15:03:07 -04:00
RejectionMailer.expects(:send_rejection).with(
message.from, message.body, message.to, :email_reject_trust_level
).returns(client_message)
Email::Sender.expects(:new).with(client_message, :email_reject_trust_level).returns(sender_object)
sender_object.expects(:send)
2014-04-09 13:26:19 -04:00
poller.handle_mail(email)
end
end
describe "raises error" do
[ Email::Receiver::ProcessingError,
Email::Receiver::EmailUnparsableError,
Email::Receiver::EmptyEmailError,
Email::Receiver::UserNotFoundError,
Email::Receiver::EmailLogNotFound,
2014-06-23 21:11:50 -04:00
ActiveRecord::Rollback,
TypeError
2014-04-09 13:26:19 -04:00
].each do |exception|
it "deletes email on #{exception}" do
receiver.expects(:process).raises(exception)
email.expects(:delete)
2014-06-27 15:03:07 -04:00
Discourse.stubs(:handle_exception)
2014-04-09 13:26:19 -04:00
poller.handle_mail(email)
end
end
end
end
end