diff --git a/src/Commands/DispatchQueueCheckJobsCommand.php b/src/Commands/DispatchQueueCheckJobsCommand.php index 499279c7..b31df7a4 100644 --- a/src/Commands/DispatchQueueCheckJobsCommand.php +++ b/src/Commands/DispatchQueueCheckJobsCommand.php @@ -15,12 +15,14 @@ class DispatchQueueCheckJobsCommand extends Command public function handle(): int { /** @var QueueCheck|null $queueCheck */ - $queueCheck = Health::registeredChecks()->first( + $queueChecks = Health::registeredChecks()->filter( fn (Check $check) => $check instanceof QueueCheck ); - foreach ($queueCheck->getQueues() as $queue) { - HealthQueueJob::dispatch($queueCheck)->onQueue($queue); + foreach ($queueChecks as $queueCheck) { + foreach ($queueCheck->getQueues() as $queue) { + HealthQueueJob::dispatch($queueCheck)->onQueue($queue); + } } return static::SUCCESS; diff --git a/tests/Commands/DispatchQueueCheckJobsCommandTest.php b/tests/Commands/DispatchQueueCheckJobsCommandTest.php new file mode 100644 index 00000000..469db4f2 --- /dev/null +++ b/tests/Commands/DispatchQueueCheckJobsCommandTest.php @@ -0,0 +1,80 @@ +new(), + ]); + + artisan(DispatchQueueCheckJobsCommand::class)->assertSuccessful(); + + Bus::assertDispatchedTimes(HealthQueueJob::class, 1); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'default'); +}); + +it('dispatch to specified queue', function () { + Bus::fake(); + + Health::checks([ + QueueCheck::new()->onQueue('queue'), + ]); + + artisan(DispatchQueueCheckJobsCommand::class)->assertSuccessful(); + + Bus::assertDispatchedTimes(HealthQueueJob::class, 1); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue'); +}); + +it('dispatch to multiple queues of single check', function () { + Bus::fake(); + + Health::checks([ + QueueCheck::new()->onQueue(['queue1', 'queue2']), + ]); + + artisan(DispatchQueueCheckJobsCommand::class)->assertSuccessful(); + + Bus::assertDispatchedTimes(HealthQueueJob::class, 2); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue1'); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue2'); +}); + +it('dispatch multiple checks', function () { + Bus::fake(); + + Health::checks([ + QueueCheck::new()->onQueue('queue1')->name('Queue 1'), + QueueCheck::new()->onQueue('queue2')->name('Queue 2'), + ]); + + artisan(DispatchQueueCheckJobsCommand::class)->assertSuccessful(); + + Bus::assertDispatchedTimes(HealthQueueJob::class, 2); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue1'); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue2'); +}); + +it('dispatch to multiple queues of multiple checks', function () { + Bus::fake(); + + Health::checks([ + QueueCheck::new()->onQueue(['queue1', 'queue2'])->name('Queue 12'), + QueueCheck::new()->onQueue(['queue3', 'queue4'])->name('Queue 34'), + ]); + + artisan(DispatchQueueCheckJobsCommand::class)->assertSuccessful(); + + Bus::assertDispatchedTimes(HealthQueueJob::class, 4); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue1'); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue2'); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue3'); + Bus::assertDispatched(fn (HealthQueueJob $job) => $job->queue === 'queue4'); +});