test: cover WelcomeEmailJob and sent_to
This commit is contained in:
1 parent
726e1cd908
commit
c0f208e83a
1 file changed
+94
@@ -0,0 +1,94 @@
|
|||||||
|
require 'minitest/autorun'
|
||||||
|
require 'prism'
|
||||||
|
require 'tmpdir'
|
||||||
|
require 'fileutils'
|
||||||
|
|
||||||
|
class WelcomeEmailJob < Prism::Jobs::Job
|
||||||
|
queue_as :mailers
|
||||||
|
retry_on max_attempts: 7, backoff: :linear, base_delay: 5
|
||||||
|
|
||||||
|
def self.sent_to
|
||||||
|
@sent_to ||= []
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform(user_id)
|
||||||
|
self.class.sent_to << user_id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class PlainJob < Prism::Jobs::Job
|
||||||
|
def self.ran
|
||||||
|
@ran ||= false
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.reset!
|
||||||
|
@ran = false
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform
|
||||||
|
self.class.instance_variable_set(:@ran, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class JobTest < Minitest::Test
|
||||||
|
def setup
|
||||||
|
@dir = Dir.mktmpdir('prism-jobs-job')
|
||||||
|
@queue = Prism::Jobs::Queue.new(File.join(@dir, 'jobs.pstore'))
|
||||||
|
Prism::Jobs.default_queue = @queue
|
||||||
|
WelcomeEmailJob.sent_to.clear
|
||||||
|
PlainJob.reset!
|
||||||
|
end
|
||||||
|
|
||||||
|
def teardown
|
||||||
|
FileUtils.remove_entry(@dir)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_perform_now_runs_synchronously_without_touching_the_queue
|
||||||
|
WelcomeEmailJob.perform_now(101)
|
||||||
|
|
||||||
|
assert_equal [101], WelcomeEmailJob.sent_to
|
||||||
|
assert_equal 0, @queue.size
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_perform_later_enqueues_with_the_declared_queue_and_retry_policy
|
||||||
|
WelcomeEmailJob.perform_later(202)
|
||||||
|
|
||||||
|
job = @queue.pending_jobs.first
|
||||||
|
assert_equal 'WelcomeEmailJob', job[:job_class]
|
||||||
|
assert_equal [202], job[:args]
|
||||||
|
assert_equal 'mailers', job[:queue_name]
|
||||||
|
assert_equal 7, job[:max_attempts]
|
||||||
|
assert_equal({ strategy: :linear, base_delay: 5 }, job[:backoff])
|
||||||
|
assert_empty WelcomeEmailJob.sent_to
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_perform_later_can_override_the_declared_queue
|
||||||
|
WelcomeEmailJob.perform_later(303, queue: 'urgent_mailers')
|
||||||
|
|
||||||
|
assert_equal 'urgent_mailers', @queue.pending_jobs.first[:queue_name]
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_perform_later_honors_an_explicit_run_at
|
||||||
|
future = Time.now + 3600
|
||||||
|
WelcomeEmailJob.perform_later(404, run_at: future)
|
||||||
|
|
||||||
|
assert_nil @queue.next_ready
|
||||||
|
job = @queue.pending_jobs.first
|
||||||
|
assert_in_delta future.to_f, job[:run_at].to_f, 1.0
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_job_without_queue_as_or_retry_on_uses_sane_defaults
|
||||||
|
PlainJob.perform_later
|
||||||
|
|
||||||
|
job = @queue.pending_jobs.first
|
||||||
|
assert_equal 'default', job[:queue_name]
|
||||||
|
assert_equal 5, job[:max_attempts]
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_enqueued_jobs_actually_run_through_a_worker
|
||||||
|
WelcomeEmailJob.perform_later(505)
|
||||||
|
Prism::Jobs::Worker.new(@queue).work_off
|
||||||
|
|
||||||
|
assert_equal [505], WelcomeEmailJob.sent_to
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in new issue
Block a user