Skip to content

Commit

Permalink
Test arbitration
Browse files Browse the repository at this point in the history
  • Loading branch information
DouweM committed Oct 7, 2015
1 parent d7efe9e commit 28ffd49
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 12 deletions.
2 changes: 0 additions & 2 deletions lib/mail_room/arbitration/redis.rb
Expand Up @@ -17,8 +17,6 @@ def initialize(mailbox)

attr_accessor :options

# Build a new delivery, hold the mailbox configuration
# @param [MailRoom::Delivery::Sidekiq::Options]
def initialize(options)
@options = options
end
Expand Down
4 changes: 1 addition & 3 deletions lib/mail_room/mailbox_handler.rb
Expand Up @@ -43,9 +43,7 @@ def new_messages
# search for all new (unseen) message ids
# @return [Array<Integer>] message ids
def new_message_ids
uids = @imap.uid_search(@mailbox.search_command)
uids.select! { |uid| @mailbox.deliver?(uid) }
uids
@imap.uid_search(@mailbox.search_command).select { |uid| @mailbox.deliver?(uid) }
end

# @private
Expand Down
3 changes: 2 additions & 1 deletion mail_room.gemspec
Expand Up @@ -22,12 +22,13 @@ Gem::Specification.new do |gem|
gem.add_development_dependency "mocha"
gem.add_development_dependency "bourne"
gem.add_development_dependency "simplecov"
gem.add_development_dependency "fakeredis"

# for testing delivery methods
gem.add_development_dependency "faraday"
gem.add_development_dependency "mail"
gem.add_development_dependency "letter_opener"
gem.add_development_dependency "redis"
gem.add_development_dependency "redis-namespace"
gem.add_development_dependency "pg"
gem.add_development_dependency "charlock_holmes"
end
57 changes: 55 additions & 2 deletions spec/lib/arbitration/redis_spec.rb
Expand Up @@ -2,9 +2,62 @@
require 'mail_room/arbitration/redis'

describe MailRoom::Arbitration::Redis do
let(:mailbox) {
MailRoom::Mailbox.new(
arbitration_options: {
namespace: "mail_room"
}
)
}
let(:options) { described_class::Options.new(mailbox) }
subject { described_class.new(options) }

# Private, but we don't care.
let(:redis) { subject.send(:redis) }

describe '#deliver?' do
let(:mailbox) { MailRoom::Mailbox.new }
context "when called the first time" do
it "returns true" do
expect(subject.deliver?(123)).to be_truthy
end

it "increments the delivered flag" do
subject.deliver?(123)

expect(redis.get("delivered:123")).to eq("1")
end

it "sets an expiration on the delivered flag" do
subject.deliver?(123)

expect(redis.ttl("delivered:123")).to be > 0
end
end

context "when called the second time" do
before do
subject.deliver?(123)
end

it "returns false" do
expect(subject.deliver?(123)).to be_falsey
end

it "increments the delivered flag" do
subject.deliver?(123)

expect(redis.get("delivered:123")).to eq("2")
end
end

context "when called for another uid" do
before do
subject.deliver?(123)
end

# TODO
it "returns true" do
expect(subject.deliver?(234)).to be_truthy
end
end
end
end
19 changes: 19 additions & 0 deletions spec/lib/mailbox_handler_spec.rb
Expand Up @@ -21,6 +21,25 @@
mailbox.should have_received(:deliver).with(message2)
end

it "fetches and delivers all new messages from ids that haven't been processed yet" do
imap.stubs(:uid_search).returns([1,2])
message1 = stub(:attr => {'RFC822' => 'message1'})
message2 = stub(:attr => {'RFC822' => 'message2'})
imap.stubs(:uid_fetch).returns([message2])
mailbox.stubs(:deliver)
mailbox.stubs(:deliver?).with(1).returns(false)
mailbox.stubs(:deliver?).with(2).returns(true)

handler = MailRoom::MailboxHandler.new(mailbox, imap)
handler.process

imap.should have_received(:uid_search).with('UNSEEN')
imap.should have_received(:uid_fetch).with([2], 'RFC822')

mailbox.should have_received(:deliver).with(message1).never
mailbox.should have_received(:deliver).with(message2)
end

it 'returns no messages if there are no ids' do
imap.stubs(:uid_search).returns([])
imap.stubs(:uid_fetch)
Expand Down
4 changes: 0 additions & 4 deletions spec/lib/mailbox_spec.rb
Expand Up @@ -89,9 +89,5 @@
noop.should have_received(:deliver).never
end
end

describe "arbitration" do
# TODO
end
end
end
1 change: 1 addition & 0 deletions spec/spec_helper.rb
Expand Up @@ -6,6 +6,7 @@
require 'rspec'
require 'mocha/api'
require 'bourne'
require 'fakeredis/rspec'

require File.expand_path('../../lib/mail_room', __FILE__)

Expand Down

0 comments on commit 28ffd49

Please sign in to comment.