Skip to content

Commit

Permalink
Refactor matchers
Browse files Browse the repository at this point in the history
- restores support for REE 1.8.7
- close leshill#10
  • Loading branch information
leshill committed Mar 27, 2011
1 parent 97aa297 commit 296fd37
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 79 deletions.
45 changes: 33 additions & 12 deletions lib/resque_spec/matchers.rb
@@ -1,12 +1,33 @@
require 'rspec'

RSpec::Matchers.define :have_queued do |*expected_args|
match do |actual|
ResqueSpec.in_queue?(actual, *expected_args, :queue_name => @queue_name)
module InQueueHelper
def self.extended(klass)
klass.instance_eval do
chain :in do |queue_name|
self.queue_name = queue_name
end
end
end

chain :in do |queue_name|
@queue_name = queue_name
private

attr_accessor :queue_name

def queue(actual)
if @queue_name
ResqueSpec.queue_by_name(@queue_name)
else
ResqueSpec.queue_for(actual)
end
end

end

RSpec::Matchers.define :have_queued do |*expected_args|
extend InQueueHelper

match do |actual|
queue(actual).any? { |entry| entry[:klass].to_s == actual.to_s && entry[:args] == expected_args }
end

failure_message_for_should do |actual|
Expand All @@ -23,12 +44,10 @@
end

RSpec::Matchers.define :have_queue_size_of do |size|
match do |actual|
(@queue ||= ResqueSpec.queue_for(actual)).size == size
end
extend InQueueHelper

chain :in do |queue_name|
@queue = ResqueSpec.queues[queue_name]
match do |actual|
queue(actual).size == size
end

failure_message_for_should do |actual|
Expand All @@ -46,7 +65,7 @@

RSpec::Matchers.define :have_scheduled do |*expected_args|
match do |actual|
ResqueSpec.scheduled_anytime?(actual, *expected_args)
ResqueSpec.schedule_for(actual).any? { |entry| entry[:klass].to_s == actual.to_s && entry[:args] == expected_args }
end

failure_message_for_should do |actual|
Expand All @@ -64,7 +83,9 @@

RSpec::Matchers.define :have_scheduled_at do |*expected_args|
match do |actual|
ResqueSpec.scheduled?(actual, *expected_args)
time = expected_args.first
other_args = expected_args[1..-1]
ResqueSpec.schedule_for(actual).any? { |entry| entry[:klass].to_s == actual.to_s && entry[:time] == time && entry[:args] == other_args }
end

failure_message_for_should do |actual|
Expand Down
8 changes: 0 additions & 8 deletions lib/resque_spec/resque_scheduler_spec.rb
Expand Up @@ -2,14 +2,6 @@

module ResqueSpec

def scheduled?(klass, time, *args)
schedule_for(klass).any? {|entry| entry[:klass].to_s == klass.to_s && entry[:time] == time && entry[:args] == args}
end

def scheduled_anytime?(klass, *args)
schedule_for(klass).any? {|entry| entry[:klass].to_s == klass.to_s && entry[:args] == args}
end

def schedule_for(klass)
name = "#{queue_name(klass)}_scheduled"
queues[name]
Expand Down
12 changes: 3 additions & 9 deletions lib/resque_spec/resque_spec.rb
Expand Up @@ -3,14 +3,12 @@
module ResqueSpec
extend self

def in_queue?(klass, *args)
options = args.last.is_a?(Hash) ? args.pop : {}
queue = options[:queue_name] ? queues[options[:queue_name]] : queue_for(klass)
queue.any? {|entry| entry[:klass].to_s == klass.to_s && entry[:args] == args}
def queue_by_name(name)
queues[name]
end

def queue_for(klass)
queues[queue_name(klass)]
queue_by_name(queue_name(klass))
end

def queue_name(klass)
Expand All @@ -23,10 +21,6 @@ def queue_name(klass)
raise ::Resque::NoQueueError.new("Jobs must be placed onto a queue.")
end

def queue_size(klass)
queue_for(klass).size
end

def queues
@queues ||= Hash.new {|h,k| h[k] = []}
end
Expand Down
22 changes: 0 additions & 22 deletions spec/resque_scheduler_spec_spec.rb
Expand Up @@ -9,28 +9,6 @@
let(:last_name) { 'Hill' }
let(:scheduled_at) { Time.now + 5 * 60 }

describe "scheduled?" do
it "returns true if the arguments were queued" do
Resque.enqueue_at(scheduled_at, Person, first_name, last_name)
ResqueSpec.scheduled?(Person, scheduled_at, first_name, last_name).should be
end

it "returns false if the arguments were not queued" do
ResqueSpec.scheduled?(Person, scheduled_at, first_name, last_name).should_not be
end
end

describe "scheduled_anytime?" do
it "returns true if the arguments were queued" do
Resque.enqueue_at(scheduled_at, Person, first_name, last_name)
ResqueSpec.scheduled_anytime?(Person, first_name, last_name).should be
end

it "returns false if the arguments were not queued" do
ResqueSpec.scheduled_anytime?(Person, first_name, last_name).should_not be
end
end

describe "#schedule_for" do
it "raises if there is no schedule queue defined for a class" do
expect do
Expand Down
41 changes: 13 additions & 28 deletions spec/resque_spec_spec.rb
Expand Up @@ -8,6 +8,19 @@
let(:first_name) { 'Les' }
let(:last_name) { 'Hill' }

describe "#queue_by_name" do

it "has an empty array if nothing queued for a class" do
ResqueSpec.queue_by_name(:my_queue).should == []
end

it "allows additions" do
ResqueSpec.queue_by_name(:my_queue) << 'queued'
ResqueSpec.queue_by_name(:my_queue).should_not be_empty
end

end

describe "#queue_for" do
it "raises if there is no queue defined for a class" do
expect do
Expand All @@ -27,14 +40,6 @@
end.should_not raise_error(::Resque::NoQueueError)
end

it "has an empty array if nothing queued for a class" do
ResqueSpec.queue_for(Person).should == []
end

it "allows additions" do
ResqueSpec.queue_for(Person) << 'queued'
ResqueSpec.queue_for(Person).should_not be_empty
end
end

describe "#queue_name" do
Expand All @@ -59,13 +64,6 @@

end

describe "#queue_size" do

before { 3.times { ResqueSpec.queue_for(Account) << 'queued' }}
subject { ResqueSpec.queue_size(Account) }
it { should == 3 }
end

describe "#reset!" do
it "clears the queues" do
ResqueSpec.queue_for(Person) << 'queued'
Expand All @@ -74,19 +72,6 @@
end
end

describe "in_queue?" do

it "returns true if the arguments were queued" do
Resque.enqueue(Person, first_name, last_name)
ResqueSpec.in_queue?(Person, first_name, last_name).should be
end

it "returns false if the arguments were not queued" do
ResqueSpec.in_queue?(Person, first_name, last_name).should_not be
end

end

describe "Resque" do
before do
Resque.enqueue(Person, "abc", "def")
Expand Down

0 comments on commit 296fd37

Please sign in to comment.