diff --git a/tests/Integration/Queue/JobChainingTest.php b/tests/Integration/Queue/JobChainingTest.php index 7037625b62bf..38d8a2222a7b 100644 --- a/tests/Integration/Queue/JobChainingTest.php +++ b/tests/Integration/Queue/JobChainingTest.php @@ -5,6 +5,7 @@ use Illuminate\Bus\Batchable; use Illuminate\Bus\PendingBatch; use Illuminate\Bus\Queueable; +use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Foundation\Bus\PendingChain; @@ -459,6 +460,18 @@ public function testChainBatchFailureNotAllowed() $this->assertEquals(['batch failed', 'chain failed'], JobRunRecorder::$failures); } + public function testChainBatchUniqueJobFiresAtLeastOnce() + { + Bus::chain([ + new JobChainingTestUniqueJob('c1'), + new JobChainingTestUniqueJob('c2'), + new JobChainingTestUniqueJob('c3'), + new JobChainingTestUniqueJob('c4'), + ])->dispatch(); + + $this->assertEquals(['c1'], JobRunRecorder::$results); + } + public function testChainConditionable() { $chain = Bus::chain([]) @@ -692,6 +705,25 @@ public function handle() } } +class JobChainingTestUniqueJob implements ShouldBeUnique +{ + use Dispatchable, InteractsWithQueue, Queueable; + + public static $results = []; + + public string $id; + + public function __construct(string $id) + { + $this->id = $id; + } + + public function handle() + { + JobRunRecorder::record($this->id); + } +} + class JobRunRecorder { public static $results = [];