5
5
namespace Tests ;
6
6
7
7
use Illuminate \Queue \Events \JobReleasedAfterException ;
8
+ use Illuminate \Queue \WorkerOptions ;
8
9
use Illuminate \Support \Facades \Event ;
10
+ use Override ;
9
11
use PHPUnit \Framework \Attributes \Test ;
10
12
use PHPUnit \Framework \Attributes \TestWith ;
11
13
use Stackkit \LaravelGoogleCloudTasksQueue \CloudTasksApi ;
14
+ use Stackkit \LaravelGoogleCloudTasksQueue \CloudTasksQueue ;
15
+ use Stackkit \LaravelGoogleCloudTasksQueue \IncomingTask ;
12
16
use Tests \Support \EncryptedJob ;
13
17
use Tests \Support \FailingJob ;
14
18
use Tests \Support \FailingJobWithMaxTries ;
15
19
use Tests \Support \FailingJobWithMaxTriesAndRetryUntil ;
20
+ use Tests \Support \FailingJobWithNoMaxTries ;
16
21
use Tests \Support \FailingJobWithRetryUntil ;
17
22
use Tests \Support \FailingJobWithUnlimitedTries ;
18
23
use Tests \Support \JobOutput ;
@@ -28,6 +33,14 @@ protected function setUp(): void
28
33
CloudTasksApi::fake ();
29
34
}
30
35
36
+ #[Override]
37
+ protected function tearDown (): void
38
+ {
39
+ parent ::tearDown ();
40
+
41
+ CloudTasksQueue::forgetWorkerOptionsCallback ();
42
+ }
43
+
31
44
#[Test]
32
45
public function it_can_run_a_task ()
33
46
{
@@ -77,6 +90,38 @@ public function after_max_attempts_it_will_log_to_failed_table()
77
90
$ this ->assertDatabaseCount ('failed_jobs ' , 1 );
78
91
}
79
92
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
+
80
125
#[Test]
81
126
public function after_max_attempts_it_will_no_longer_execute_the_task ()
82
127
{
0 commit comments