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$ taskqueue ()] ?? 1 );
104+         });
105+ 
106+         $ job$ this dispatch (tap (new  FailingJobWithNoMaxTries (), fn  ($ job$ jobqueue  = 'high ' ));
107+ 
108+         // Act & Assert 
109+         $ this assertDatabaseCount ('failed_jobs ' , 0 );
110+ 
111+         $ releasedJob$ jobrunAndGetReleasedJob ();
112+         $ this assertDatabaseCount ('failed_jobs ' , 0 );
113+ 
114+         $ releasedJob$ releasedJobrunAndGetReleasedJob ();
115+         $ this assertDatabaseCount ('failed_jobs ' , 0 );
116+         $ releasedJob$ releasedJobrunAndGetReleasedJob ();
117+         $ this assertDatabaseCount ('failed_jobs ' , 0 );
118+         $ releasedJob$ releasedJobrunAndGetReleasedJob ();
119+         $ this assertDatabaseCount ('failed_jobs ' , 0 );
120+ 
121+         $ releasedJobrun ();
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