Skip to content

Commit

Permalink
Minimal support for testing
Browse files Browse the repository at this point in the history
  • Loading branch information
mjonuschat committed Mar 14, 2012
1 parent 8998f2c commit c8cd408
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 0 deletions.
33 changes: 33 additions & 0 deletions lib/sidekiq-scheduler/testing.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
require 'sidekiq/testing'

module SidekiqScheduler
module Worker
module ClassMethods
alias_method :perform_at_old, :perform_at
def perform_at(timestamp, *args)
jobs << { 'class' => self.name, 'timestamp' => timestamp.to_i, 'args' => args }
true
end

alias_method :perform_in_old, :perform_in
def perform_in(seconds_from_now, *args)
timestamp = Time.now + seconds_from_now
jobs << { 'class' => self.name, 'timestamp' => timestamp.to_i, 'args' => args }
end

alias_method :remove_delayed_old, :remove_delayed
def remove_delayed(*args)
old_jobcount = jobs.size
jobs.reject! { |job| job["class"] == self.name && job["args"] == args }
old_jobcount - jobs.size
end

alias_method :remove_delayed_from_timestamp_old, :remove_delayed_from_timestamp
def remove_delayed_from_timestamp(timestamp, *args)
old_jobcount = jobs.size
jobs.reject! { |job| job["class"] == self.name && job["timestamp"] == timestamp.to_i && job["args"] == args }
old_jobcount - jobs.size
end
end
end
end
6 changes: 6 additions & 0 deletions test/support/direct_worker.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class DirectWorker
include Sidekiq::Worker
def perform(a, b)
a + b
end
end
38 changes: 38 additions & 0 deletions test/testing_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
require 'test_helper'
require 'sidekiq-scheduler/worker'

class TestingTest < MiniTest::Unit::TestCase
describe 'sidekiq-scheduler testing' do

it 'stubs the perform_* calls when in testing mode' do
begin
require 'sidekiq-scheduler/testing'
# perform_at
assert_equal 0, DirectWorker.jobs.size
assert DirectWorker.perform_at(1331759054, 1, 2)
assert_equal 1, DirectWorker.jobs.size
assert_equal 1331759054, DirectWorker.jobs[0]['timestamp']
DirectWorker.jobs.clear

# perform_in
Timecop.freeze(Time.now) do
timestamp = Time.now + 30
assert_equal 0, DirectWorker.jobs.size
assert DirectWorker.perform_in(30, 1, 2)
assert_equal 1, DirectWorker.jobs.size
assert_equal timestamp.to_i, DirectWorker.jobs[0]['timestamp']
end
ensure
# Undo override
SidekiqScheduler::Worker::ClassMethods.class_eval do
remove_method :perform_at, :perform_in, :remove_delayed, :remove_delayed_from_timestamp
alias_method :perform_at, :perform_at_old
alias_method :perform_in, :perform_in_old
alias_method :remove_delayed, :remove_delayed_old
alias_method :remove_delayed_from_timestamp, :remove_delayed_from_timestamp_old
remove_method :perform_at_old, :perform_in_old, :remove_delayed_old, :remove_delayed_from_timestamp_old
end
end
end
end
end

0 comments on commit c8cd408

Please sign in to comment.