123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- <?php
- namespace Illuminate\Tests\Queue;
- use Exception;
- use Illuminate\Container\Container;
- use Illuminate\Contracts\Events\Dispatcher;
- use Illuminate\Contracts\Queue\QueueableEntity;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\Jobs\SyncJob;
- use Illuminate\Queue\SyncQueue;
- use LogicException;
- use Mockery as m;
- use PHPUnit\Framework\TestCase;
- class QueueSyncQueueTest extends TestCase
- {
- protected function tearDown(): void
- {
- m::close();
- Container::setInstance(null);
- }
- public function testPushShouldFireJobInstantly()
- {
- unset($_SERVER['__sync.test']);
- $sync = new SyncQueue;
- $container = new Container;
- $sync->setContainer($container);
- $sync->push(SyncQueueTestHandler::class, ['foo' => 'bar']);
- $this->assertInstanceOf(SyncJob::class, $_SERVER['__sync.test'][0]);
- $this->assertEquals(['foo' => 'bar'], $_SERVER['__sync.test'][1]);
- }
- public function testFailedJobGetsHandledWhenAnExceptionIsThrown()
- {
- unset($_SERVER['__sync.failed']);
- $sync = new SyncQueue;
- $container = new Container;
- Container::setInstance($container);
- $events = m::mock(Dispatcher::class);
- $events->shouldReceive('dispatch')->times(3);
- $container->instance('events', $events);
- $container->instance(Dispatcher::class, $events);
- $sync->setContainer($container);
- try {
- $sync->push(FailingSyncQueueTestHandler::class, ['foo' => 'bar']);
- } catch (Exception $e) {
- $this->assertTrue($_SERVER['__sync.failed']);
- }
- Container::setInstance();
- }
- public function testCreatesPayloadObject()
- {
- $sync = new SyncQueue;
- $container = new Container;
- $container->bind(\Illuminate\Contracts\Events\Dispatcher::class, \Illuminate\Events\Dispatcher::class);
- $container->bind(\Illuminate\Contracts\Bus\Dispatcher::class, \Illuminate\Bus\Dispatcher::class);
- $container->bind(\Illuminate\Contracts\Container\Container::class, \Illuminate\Container\Container::class);
- $sync->setContainer($container);
- SyncQueue::createPayloadUsing(function ($connection, $queue, $payload) {
- return ['data' => ['extra' => 'extraValue']];
- });
- try {
- $sync->push(new SyncQueueJob());
- } catch (LogicException $e) {
- $this->assertEquals('extraValue', $e->getMessage());
- }
- }
- }
- class SyncQueueTestEntity implements QueueableEntity
- {
- public function getQueueableId()
- {
- return 1;
- }
- public function getQueueableConnection()
- {
- //
- }
- public function getQueueableRelations()
- {
- //
- }
- }
- class SyncQueueTestHandler
- {
- public function fire($job, $data)
- {
- $_SERVER['__sync.test'] = func_get_args();
- }
- }
- class FailingSyncQueueTestHandler
- {
- public function fire($job, $data)
- {
- throw new Exception;
- }
- public function failed()
- {
- $_SERVER['__sync.failed'] = true;
- }
- }
- class SyncQueueJob implements ShouldQueue
- {
- use InteractsWithQueue;
- public function handle()
- {
- throw new LogicException($this->getValueFromJob('extra'));
- }
- public function getValueFromJob($key)
- {
- $payload = $this->job->payload();
- return $payload['data'][$key] ?? null;
- }
- }
|