Module: ActiveJob::Continuation::TestHelper

Includes:
TestHelper
Defined in:
lib/active_job/continuation/test_helper.rb

Overview

Test helper for ActiveJob::Continuable jobs.

Instance Method Summary collapse

Methods included from TestHelper

#after_teardown, #assert_enqueued_jobs, #assert_enqueued_with, #assert_no_enqueued_jobs, #assert_no_performed_jobs, #assert_performed_jobs, #assert_performed_with, #before_setup, #perform_enqueued_jobs, #queue_adapter, #queue_adapter_for_test

Instance Method Details

#interrupt_job_after_step(job, step, &block) ⇒ Object

Interrupt a job after a step.

Note that there's no checkpoint after the final step so it won't be interrupted.

class MyJob < ApplicationJob include ActiveJob::Continuable

cattr_accessor :items, default: []

def perform
 step :step_one { items << 1 }
 step :step_two { items << 2 }
 step :step_three { items << 3 }
 step :step_four { items << 4 }
end

end

test "interrupt job after step" do MyJob.perform_later interrupt_job_after_step(MyJob, :step_two) { perform_enqueued_jobs } assert_equal [1, 2], MyJob.items perform_enqueued_jobs assert_equal [1, 2, 3, 4], MyJob.items end



65
66
67
68
# File 'lib/active_job/continuation/test_helper.rb', line 65

def interrupt_job_after_step(job, step, &block)
  require_active_job_test_adapter!("interrupt_job_after_step")
  queue_adapter.with(stopping: ->() { after_step?(job, step) }, &block)
end

#interrupt_job_during_step(job, step, cursor: nil, &block) ⇒ Object

Interrupt a job during a step.

class MyJob < ApplicationJob include ActiveJob::Continuable

cattr_accessor :items, default: []
def perform
 step :my_step, start: 1 do |step|
   (step.cursor..10).each do |i|
     items << i
     step.advance!
   end
 end
end

end

test "interrupt job during step" do MyJob.perform_later interrupt_job_during_step(MyJob, :my_step, cursor: 6) { perform_enqueued_jobs } assert_equal [1, 2, 3, 4, 5], MyJob.items perform_enqueued_jobs assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], MyJob.items end



36
37
38
39
# File 'lib/active_job/continuation/test_helper.rb', line 36

def interrupt_job_during_step(job, step, cursor: nil, &block)
  require_active_job_test_adapter!("interrupt_job_during_step")
  queue_adapter.with(stopping: ->() { during_step?(job, step, cursor: cursor) }, &block)
end