123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <?php
- namespace Illuminate\Tests\Events;
- use Illuminate\Container\Container;
- use Illuminate\Contracts\Queue\Queue;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Events\CallQueuedListener;
- use Illuminate\Events\Dispatcher;
- use Illuminate\Support\Testing\Fakes\QueueFake;
- use Mockery as m;
- use PHPUnit\Framework\TestCase;
- class QueuedEventsTest extends TestCase
- {
- protected function tearDown(): void
- {
- m::close();
- }
- public function testQueuedEventHandlersAreQueued()
- {
- $d = new Dispatcher;
- $queue = m::mock(Queue::class);
- $queue->shouldReceive('connection')->once()->with(null)->andReturnSelf();
- $queue->shouldReceive('pushOn')->once()->with(null, m::type(CallQueuedListener::class));
- $d->setQueueResolver(function () use ($queue) {
- return $queue;
- });
- $d->listen('some.event', TestDispatcherQueuedHandler::class.'@someMethod');
- $d->dispatch('some.event', ['foo', 'bar']);
- }
- public function testCustomizedQueuedEventHandlersAreQueued()
- {
- $d = new Dispatcher;
- $fakeQueue = new QueueFake(new Container);
- $d->setQueueResolver(function () use ($fakeQueue) {
- return $fakeQueue;
- });
- $d->listen('some.event', TestDispatcherConnectionQueuedHandler::class.'@handle');
- $d->dispatch('some.event', ['foo', 'bar']);
- $fakeQueue->assertPushedOn('my_queue', CallQueuedListener::class);
- }
- public function testQueueIsSetByGetQueue()
- {
- $d = new Dispatcher;
- $fakeQueue = new QueueFake(new Container);
- $d->setQueueResolver(function () use ($fakeQueue) {
- return $fakeQueue;
- });
- $d->listen('some.event', TestDispatcherGetQueue::class.'@handle');
- $d->dispatch('some.event', ['foo', 'bar']);
- $fakeQueue->assertPushedOn('some_other_queue', CallQueuedListener::class);
- }
- public function testQueueIsSetByGetConnection()
- {
- $d = new Dispatcher;
- $queue = m::mock(Queue::class);
- $queue->shouldReceive('connection')->once()->with('some_other_connection')->andReturnSelf();
- $queue->shouldReceive('pushOn')->once()->with(null, m::type(CallQueuedListener::class));
- $d->setQueueResolver(function () use ($queue) {
- return $queue;
- });
- $d->listen('some.event', TestDispatcherGetConnection::class.'@handle');
- $d->dispatch('some.event', ['foo', 'bar']);
- }
- public function testQueuePropagateRetryUntilAndMaxExceptions()
- {
- $d = new Dispatcher;
- $fakeQueue = new QueueFake(new Container);
- $d->setQueueResolver(function () use ($fakeQueue) {
- return $fakeQueue;
- });
- $d->listen('some.event', TestDispatcherOptions::class.'@handle');
- $d->dispatch('some.event', ['foo', 'bar']);
- $fakeQueue->assertPushed(CallQueuedListener::class, function ($job) {
- return $job->maxExceptions === 1 && $job->retryUntil !== null;
- });
- }
- public function testQueuePropagateMiddleware()
- {
- $d = new Dispatcher;
- $fakeQueue = new QueueFake(new Container);
- $d->setQueueResolver(function () use ($fakeQueue) {
- return $fakeQueue;
- });
- $d->listen('some.event', TestDispatcherMiddleware::class.'@handle');
- $d->dispatch('some.event', ['foo', 'bar']);
- $fakeQueue->assertPushed(CallQueuedListener::class, function ($job) {
- return count($job->middleware) === 1 && $job->middleware[0] instanceof TestMiddleware;
- });
- }
- }
- class TestDispatcherQueuedHandler implements ShouldQueue
- {
- public function handle()
- {
- //
- }
- }
- class TestDispatcherConnectionQueuedHandler implements ShouldQueue
- {
- public $connection = 'redis';
- public $delay = 10;
- public $queue = 'my_queue';
- public function handle()
- {
- //
- }
- }
- class TestDispatcherGetQueue implements ShouldQueue
- {
- public $queue = 'my_queue';
- public function handle()
- {
- //
- }
- public function viaQueue()
- {
- return 'some_other_queue';
- }
- }
- class TestDispatcherGetConnection implements ShouldQueue
- {
- public $connection = 'my_connection';
- public function handle()
- {
- //
- }
- public function viaConnection()
- {
- return 'some_other_connection';
- }
- }
- class TestDispatcherOptions implements ShouldQueue
- {
- public $maxExceptions = 1;
- public function retryUntil()
- {
- return now()->addHour(1);
- }
- public function handle()
- {
- //
- }
- }
- class TestDispatcherMiddleware implements ShouldQueue
- {
- public function middleware()
- {
- return [new TestMiddleware()];
- }
- public function handle()
- {
- //
- }
- }
- class TestMiddleware
- {
- public function handle($job, $next)
- {
- $next($job);
- }
- }
|