55namespace Tests ;
66
77use Illuminate \Queue \Events \JobReleasedAfterException ;
8+ use Illuminate \Queue \WorkerOptions ;
89use Illuminate \Support \Facades \Event ;
10+ use Override ;
911use PHPUnit \Framework \Attributes \Test ;
1012use PHPUnit \Framework \Attributes \TestWith ;
1113use Stackkit \LaravelGoogleCloudTasksQueue \CloudTasksApi ;
14+ use Stackkit \LaravelGoogleCloudTasksQueue \CloudTasksQueue ;
15+ use Stackkit \LaravelGoogleCloudTasksQueue \IncomingTask ;
1216use Tests \Support \EncryptedJob ;
1317use Tests \Support \FailingJob ;
1418use Tests \Support \FailingJobWithMaxTries ;
1519use Tests \Support \FailingJobWithMaxTriesAndRetryUntil ;
20+ use Tests \Support \FailingJobWithNoMaxTries ;
1621use Tests \Support \FailingJobWithRetryUntil ;
1722use Tests \Support \FailingJobWithUnlimitedTries ;
1823use Tests \Support \JobOutput ;
@@ -28,6 +33,14 @@ protected function setUp(): void
2833 CloudTasksApi::fake ();
2934 }
3035
36+ #[Override]
37+ protected function tearDown (): void
38+ {
39+ parent ::tearDown ();
40+
41+ CloudTasksQueue::forgetWorkerOptionsCallback ();
42+ }
43+
3144 #[Test]
3245 public function it_can_run_a_task ()
3346 {
@@ -77,6 +90,38 @@ public function after_max_attempts_it_will_log_to_failed_table()
7790 $ this ->assertDatabaseCount ('failed_jobs ' , 1 );
7891 }
7992
93+ #[Test]
94+ public function uses_worker_options_callback_and_after_max_attempts_it_will_log_to_failed_table ()
95+ {
96+ // Arrange
97+ CloudTasksQueue::configureWorkerOptionsUsing (function (IncomingTask $ task ) {
98+ $ queueTries = [
99+ 'high ' => 5 ,
100+ 'low ' => 1 ,
101+ ];
102+
103+ return new WorkerOptions (maxTries: $ queueTries [$ task ->queue ()] ?? 1 );
104+ });
105+
106+ $ job = $ this ->dispatch (tap (new FailingJobWithNoMaxTries (), fn ($ job ) => $ job ->queue = 'high ' ));
107+
108+ // Act & Assert
109+ $ this ->assertDatabaseCount ('failed_jobs ' , 0 );
110+
111+ $ releasedJob = $ job ->runAndGetReleasedJob ();
112+ $ this ->assertDatabaseCount ('failed_jobs ' , 0 );
113+
114+ $ releasedJob = $ releasedJob ->runAndGetReleasedJob ();
115+ $ this ->assertDatabaseCount ('failed_jobs ' , 0 );
116+ $ releasedJob = $ releasedJob ->runAndGetReleasedJob ();
117+ $ this ->assertDatabaseCount ('failed_jobs ' , 0 );
118+ $ releasedJob = $ releasedJob ->runAndGetReleasedJob ();
119+ $ this ->assertDatabaseCount ('failed_jobs ' , 0 );
120+
121+ $ releasedJob ->run ();
122+ $ this ->assertDatabaseCount ('failed_jobs ' , 1 );
123+ }
124+
80125 #[Test]
81126 public function after_max_attempts_it_will_no_longer_execute_the_task ()
82127 {
0 commit comments