@@ -7,10 +7,14 @@ class BatchLifecycleTest < ActiveSupport::TestCase
77
88 def assert_finished_in_order ( *finishables )
99 finishables . each_cons ( 2 ) do |finished1 , finished2 |
10- assert_equal finished1 . reload . finished_at < finished2 . reload . finished_at , true
10+ assert_equal finished1 . finished_at < finished2 . finished_at , true
1111 end
1212 end
1313
14+ def job! ( active_job )
15+ SolidQueue ::Job . find_by! ( active_job_id : active_job . job_id )
16+ end
17+
1418 setup do
1519 @_on_thread_error = SolidQueue . on_thread_error
1620 SolidQueue . on_thread_error = silent_on_thread_error_for ( [ FailingJobError ] , @_on_thread_error )
@@ -128,17 +132,18 @@ def perform
128132 expected_values = [ "1: 1 jobs succeeded!" , "1.1: 1 jobs succeeded!" , "2: 1 jobs succeeded!" , "3: 1 jobs succeeded!" ]
129133 assert_equal expected_values . sort , JobBuffer . values . sort
130134 assert_equal 4 , SolidQueue ::Batch . finished . count
131- assert_finished_in_order ( batch4 , batch2 , batch1 )
132- assert_finished_in_order ( batch3 , batch2 , batch1 )
135+ assert_finished_in_order ( batch4 . reload , batch2 . reload , batch1 . reload )
136+ assert_finished_in_order ( batch3 . reload , batch2 , batch1 )
133137 end
134138
135139 test "all jobs are run, including jobs enqueued inside of other jobs" do
136140 batch2 = nil
141+ job1 = job2 = job3 = nil
137142 batch1 = SolidQueue ::Batch . enqueue do
138- AddToBufferJob . perform_later "hey"
143+ job1 = AddToBufferJob . perform_later "hey"
139144 batch2 = SolidQueue ::Batch . enqueue do
140- AddToBufferJob . perform_later "ho"
141- AddsMoreJobsJob . perform_later
145+ job2 = AddToBufferJob . perform_later "ho"
146+ job3 = AddsMoreJobsJob . perform_later
142147 end
143148 end
144149
@@ -149,25 +154,29 @@ def perform
149154
150155 assert_equal [ "added from inside 1" , "added from inside 2" , "added from inside 3" , "hey" , "ho" ] , JobBuffer . values . sort
151156 assert_equal 3 , SolidQueue ::Batch . finished . count
152- assert_finished_in_order ( batch2 , batch1 )
157+ assert_finished_in_order ( batch2 . reload , batch1 . reload )
158+ assert_finished_in_order ( job! ( job3 ) , batch2 )
159+ assert_finished_in_order ( job! ( job2 ) , batch2 )
160+ assert_finished_in_order ( job! ( job1 ) , batch1 )
153161 end
154162
155163 test "when self.enqueue_after_transaction_commit = true" do
156164 skip if Rails ::VERSION ::MAJOR == 7 && Rails ::VERSION ::MINOR == 1
157165
158166 ApplicationJob . enqueue_after_transaction_commit = true
159167 batch1 = batch2 = batch3 = nil
168+ job1 = job2 = job3 = nil
160169 JobResult . transaction do
161170 JobResult . create! ( queue_name : "default" , status : "" )
162171
163172 batch1 = SolidQueue ::Batch . enqueue do
164- AddToBufferJob . perform_later "hey"
173+ job1 = AddToBufferJob . perform_later "hey"
165174 JobResult . transaction ( requires_new : true ) do
166175 JobResult . create! ( queue_name : "default" , status : "" )
167176 batch2 = SolidQueue ::Batch . enqueue do
168- AddToBufferJob . perform_later "ho"
177+ job2 = AddToBufferJob . perform_later "ho"
169178 batch3 = SolidQueue ::Batch . enqueue do
170- AddToBufferJob . perform_later "let's go"
179+ job3 = AddToBufferJob . perform_later "let's go"
171180 end
172181 end
173182 end
@@ -179,10 +188,14 @@ def perform
179188
180189 wait_for_batches_to_finish_for ( 2 . seconds )
181190
191+ assert_equal [ "hey" , "ho" , "let's go" ] , JobBuffer . values . sort
182192 assert_equal 3 , SolidQueue ::Batch . finished . count
183193 assert_equal 3 , SolidQueue ::Job . finished . count
184194 assert_equal 3 , SolidQueue ::Job . count
185- assert_finished_in_order ( batch3 , batch2 , batch1 )
195+ assert_finished_in_order ( batch3 . reload , batch2 . reload , batch1 . reload )
196+ assert_finished_in_order ( job! ( job3 ) , batch3 )
197+ assert_finished_in_order ( job! ( job2 ) , batch2 )
198+ assert_finished_in_order ( job! ( job1 ) , batch1 )
186199 end
187200
188201 test "failed jobs fire properly" do
@@ -218,7 +231,7 @@ def perform
218231
219232 assert_equal [ "failed" , "failed" ] . sort , SolidQueue ::Batch . all . pluck ( :status )
220233 assert_equal [ "0: 1 jobs failed!" , "1: 1 jobs failed!" ] , JobBuffer . values . sort
221- assert_finished_in_order ( batch2 , batch1 )
234+ assert_finished_in_order ( batch2 . reload , batch1 . reload )
222235 end
223236
224237 test "discarded jobs fire properly" do
@@ -254,7 +267,7 @@ def perform
254267
255268 assert_equal [ "completed" , "completed" ] . sort , SolidQueue ::Batch . all . pluck ( :status )
256269 assert_equal [ "0: 1 jobs succeeded!" , "1: 1 jobs succeeded!" ] , JobBuffer . values . sort
257- assert_finished_in_order ( batch2 , batch1 )
270+ assert_finished_in_order ( batch2 . reload , batch1 . reload )
258271 end
259272
260273 test "preserve_finished_jobs = false" do
@@ -300,32 +313,6 @@ def perform
300313 assert_equal 1 , batch . total_jobs
301314 end
302315
303- # test "batch finishes without firing callbacks if no jobs enqueue properly" do
304- # ApplicationJob.enqueue_after_transaction_commit = true
305- # batch1 = nil
306- # JobResult.transaction do
307- # batch1 = SolidQueue::Batch.enqueue(
308- # metadata: { source: "test", priority: "high", user_id: 123 },
309- # on_finish: OnFinishJob,
310- # on_success: OnSuccessJob,
311- # on_failure: OnFailureJob
312- # ) do
313- # AddToBufferJob.perform_later "hey"
314- # end
315-
316- # raise ActiveRecord::Rollback
317- # end
318-
319- # assert_equal [].sort, JobBuffer.values.sort
320- # assert_equal 0, batch1.reload.completed_jobs
321- # assert_equal 0, batch1.failed_jobs
322- # assert_equal 0, batch1.pending_jobs
323- # assert_equal 0, batch1.total_jobs
324- # batch1.reload
325- # assert_equal true, batch1.finished?
326- # assert_equal "completed", batch1.status
327- # end
328-
329316 class OnFinishJob < ApplicationJob
330317 queue_as :background
331318
0 commit comments