123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- <?php
- namespace Illuminate\Tests\Integration\Queue;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Support\Facades\Bus;
- use Illuminate\Support\Facades\Queue;
- use Orchestra\Testbench\TestCase;
- class JobChainingTest extends TestCase
- {
- public static $catchCallbackRan = false;
- protected function getEnvironmentSetUp($app)
- {
- $app['config']->set('queue.connections.sync1', [
- 'driver' => 'sync',
- ]);
- $app['config']->set('queue.connections.sync2', [
- 'driver' => 'sync',
- ]);
- }
- protected function tearDown(): void
- {
- JobChainingTestFirstJob::$ran = false;
- JobChainingTestSecondJob::$ran = false;
- JobChainingTestThirdJob::$ran = false;
- static::$catchCallbackRan = false;
- }
- public function testJobsCanBeChainedOnSuccess()
- {
- JobChainingTestFirstJob::dispatch()->chain([
- new JobChainingTestSecondJob,
- ]);
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertTrue(JobChainingTestSecondJob::$ran);
- }
- public function testJobsCanBeChainedOnSuccessUsingPendingChain()
- {
- JobChainingTestFirstJob::withChain([
- new JobChainingTestSecondJob,
- ])->dispatch();
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertTrue(JobChainingTestSecondJob::$ran);
- }
- public function testJobsCanBeChainedOnSuccessUsingBusFacade()
- {
- Bus::dispatchChain([
- new JobChainingTestFirstJob,
- new JobChainingTestSecondJob,
- ]);
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertTrue(JobChainingTestSecondJob::$ran);
- }
- public function testJobsCanBeChainedOnSuccessUsingBusFacadeAsArguments()
- {
- Bus::dispatchChain(
- new JobChainingTestFirstJob,
- new JobChainingTestSecondJob
- );
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertTrue(JobChainingTestSecondJob::$ran);
- }
- public function testJobsChainedOnExplicitDelete()
- {
- JobChainingTestDeletingJob::dispatch()->chain([
- new JobChainingTestSecondJob,
- ]);
- $this->assertTrue(JobChainingTestDeletingJob::$ran);
- $this->assertTrue(JobChainingTestSecondJob::$ran);
- }
- public function testJobsCanBeChainedOnSuccessWithSeveralJobs()
- {
- JobChainingTestFirstJob::dispatch()->chain([
- new JobChainingTestSecondJob,
- new JobChainingTestThirdJob,
- ]);
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertTrue(JobChainingTestSecondJob::$ran);
- $this->assertTrue(JobChainingTestThirdJob::$ran);
- }
- public function testJobsCanBeChainedOnSuccessUsingHelper()
- {
- dispatch(new JobChainingTestFirstJob)->chain([
- new JobChainingTestSecondJob,
- ]);
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertTrue(JobChainingTestSecondJob::$ran);
- }
- public function testJobsCanBeChainedViaQueue()
- {
- Queue::connection('sync')->push((new JobChainingTestFirstJob)->chain([
- new JobChainingTestSecondJob,
- ]));
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertTrue(JobChainingTestSecondJob::$ran);
- }
- public function testSecondJobIsNotFiredIfFirstFailed()
- {
- Queue::connection('sync')->push((new JobChainingTestFailingJob)->chain([
- new JobChainingTestSecondJob,
- ]));
- $this->assertFalse(JobChainingTestSecondJob::$ran);
- }
- public function testSecondJobIsNotFiredIfFirstReleased()
- {
- Queue::connection('sync')->push((new JobChainingTestReleasingJob)->chain([
- new JobChainingTestSecondJob,
- ]));
- $this->assertFalse(JobChainingTestSecondJob::$ran);
- }
- public function testThirdJobIsNotFiredIfSecondFails()
- {
- Queue::connection('sync')->push((new JobChainingTestFirstJob)->chain([
- new JobChainingTestFailingJob,
- new JobChainingTestThirdJob,
- ]));
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertFalse(JobChainingTestThirdJob::$ran);
- }
- public function testCatchCallbackIsCalledOnFailure()
- {
- Bus::chain([
- new JobChainingTestFirstJob,
- new JobChainingTestFailingJob,
- new JobChainingTestSecondJob,
- ])->catch(static function () {
- self::$catchCallbackRan = true;
- })->dispatch();
- $this->assertTrue(JobChainingTestFirstJob::$ran);
- $this->assertTrue(static::$catchCallbackRan);
- $this->assertFalse(JobChainingTestSecondJob::$ran);
- }
- public function testChainJobsUseSameConfig()
- {
- JobChainingTestFirstJob::dispatch()->allOnQueue('some_queue')->allOnConnection('sync1')->chain([
- new JobChainingTestSecondJob,
- new JobChainingTestThirdJob,
- ]);
- $this->assertSame('some_queue', JobChainingTestFirstJob::$usedQueue);
- $this->assertSame('sync1', JobChainingTestFirstJob::$usedConnection);
- $this->assertSame('some_queue', JobChainingTestSecondJob::$usedQueue);
- $this->assertSame('sync1', JobChainingTestSecondJob::$usedConnection);
- $this->assertSame('some_queue', JobChainingTestThirdJob::$usedQueue);
- $this->assertSame('sync1', JobChainingTestThirdJob::$usedConnection);
- }
- public function testChainJobsUseOwnConfig()
- {
- JobChainingTestFirstJob::dispatch()->allOnQueue('some_queue')->allOnConnection('sync1')->chain([
- (new JobChainingTestSecondJob)->onQueue('another_queue')->onConnection('sync2'),
- new JobChainingTestThirdJob,
- ]);
- $this->assertSame('some_queue', JobChainingTestFirstJob::$usedQueue);
- $this->assertSame('sync1', JobChainingTestFirstJob::$usedConnection);
- $this->assertSame('another_queue', JobChainingTestSecondJob::$usedQueue);
- $this->assertSame('sync2', JobChainingTestSecondJob::$usedConnection);
- $this->assertSame('some_queue', JobChainingTestThirdJob::$usedQueue);
- $this->assertSame('sync1', JobChainingTestThirdJob::$usedConnection);
- }
- public function testChainJobsUseDefaultConfig()
- {
- JobChainingTestFirstJob::dispatch()->onQueue('some_queue')->onConnection('sync1')->chain([
- (new JobChainingTestSecondJob)->onQueue('another_queue')->onConnection('sync2'),
- new JobChainingTestThirdJob,
- ]);
- $this->assertSame('some_queue', JobChainingTestFirstJob::$usedQueue);
- $this->assertSame('sync1', JobChainingTestFirstJob::$usedConnection);
- $this->assertSame('another_queue', JobChainingTestSecondJob::$usedQueue);
- $this->assertSame('sync2', JobChainingTestSecondJob::$usedConnection);
- $this->assertNull(JobChainingTestThirdJob::$usedQueue);
- $this->assertNull(JobChainingTestThirdJob::$usedConnection);
- }
- }
- class JobChainingTestFirstJob implements ShouldQueue
- {
- use Dispatchable, Queueable;
- public static $ran = false;
- public static $usedQueue = null;
- public static $usedConnection = null;
- public function handle()
- {
- static::$ran = true;
- static::$usedQueue = $this->queue;
- static::$usedConnection = $this->connection;
- }
- }
- class JobChainingTestSecondJob implements ShouldQueue
- {
- use Dispatchable, Queueable;
- public static $ran = false;
- public static $usedQueue = null;
- public static $usedConnection = null;
- public function handle()
- {
- static::$ran = true;
- static::$usedQueue = $this->queue;
- static::$usedConnection = $this->connection;
- }
- }
- class JobChainingTestThirdJob implements ShouldQueue
- {
- use Dispatchable, Queueable;
- public static $ran = false;
- public static $usedQueue = null;
- public static $usedConnection = null;
- public function handle()
- {
- static::$ran = true;
- static::$usedQueue = $this->queue;
- static::$usedConnection = $this->connection;
- }
- }
- class JobChainingTestDeletingJob implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable;
- public static $ran = false;
- public function handle()
- {
- static::$ran = true;
- $this->delete();
- }
- }
- class JobChainingTestReleasingJob implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable;
- public function handle()
- {
- $this->release(30);
- }
- }
- class JobChainingTestFailingJob implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable;
- public function handle()
- {
- $this->fail();
- }
- }
|