1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00
mperham--sidekiq/test/test_testing_inline.rb
Petteri Räty 1eb0c80ca0 Inline testing should pass arguments through json
If you are passing arguments like time objects that serialize to strings
but don't deserialize back automatically, inline testing was passing the
objects through raw meaning different behavior in tests vs. production.
Now the inline wrapper does a round trip through json.
2012-06-01 16:37:50 +03:00

87 lines
2 KiB
Ruby

require 'helper'
require 'sidekiq'
require 'sidekiq/worker'
require 'active_record'
require 'action_mailer'
require 'sidekiq/rails'
require 'sidekiq/extensions/action_mailer'
require 'sidekiq/extensions/active_record'
Sidekiq.hook_rails!
class TestInline < MiniTest::Unit::TestCase
describe 'sidekiq inline testing' do
class InlineError < RuntimeError; end
class ParameterIsNotString < RuntimeError; end
class InlineWorker
include Sidekiq::Worker
def perform(pass)
raise InlineError unless pass
end
end
class InlineWorkerWithTimeParam
include Sidekiq::Worker
def perform(time)
raise ParameterIsNotString unless time.is_a?(String)
end
end
class InlineFooMailer < ActionMailer::Base
def bar(str)
raise InlineError
end
end
class InlineFooModel < ActiveRecord::Base
def self.bar(str)
raise InlineError
end
end
before do
load 'sidekiq/testing/inline.rb'
end
after do
Sidekiq::Worker::ClassMethods.class_eval do
remove_method :perform_async
alias_method :perform_async, :perform_async_old
remove_method :perform_async_old
end
end
it 'stubs the async call when in testing mode' do
assert InlineWorker.perform_async(true)
assert_raises InlineError do
InlineWorker.perform_async(false)
end
end
it 'stubs the delay call on mailers' do
assert_raises InlineError do
InlineFooMailer.delay.bar('three')
end
end
it 'stubs the delay call on models' do
assert_raises InlineError do
InlineFooModel.delay.bar('three')
end
end
it 'stubs the enqueue call when in testing mode' do
assert Sidekiq::Client.enqueue(InlineWorker, true)
assert_raises InlineError do
Sidekiq::Client.enqueue(InlineWorker, false)
end
end
it 'should relay parameters through json' do
assert Sidekiq::Client.enqueue(InlineWorkerWithTimeParam, Time.now)
end
end
end