173 lines
5.2 KiB
PHP
173 lines
5.2 KiB
PHP
<?php
|
|
|
|
use Collective\Bus\Dispatcher;
|
|
use Illuminate\Container\Container;
|
|
use Mockery as m;
|
|
|
|
class BusDispatcherTest extends PHPUnit_Framework_TestCase
|
|
{
|
|
public function tearDown()
|
|
{
|
|
m::close();
|
|
}
|
|
|
|
public function testBasicDispatchingOfCommandsToHandlers()
|
|
{
|
|
$container = new Container();
|
|
$handler = m::mock('StdClass');
|
|
$handler->shouldReceive('handle')->once()->andReturn('foo');
|
|
$container->instance('Handler', $handler);
|
|
$dispatcher = new Dispatcher($container);
|
|
$dispatcher->mapUsing(function () { return 'Handler@handle'; });
|
|
|
|
$result = $dispatcher->dispatch(new BusDispatcherTestBasicCommand());
|
|
$this->assertEquals('foo', $result);
|
|
}
|
|
|
|
public function testCommandsThatShouldQueueIsQueued()
|
|
{
|
|
$container = new Container();
|
|
$dispatcher = new Dispatcher($container, function () {
|
|
$mock = m::mock('Illuminate\Contracts\Queue\Queue');
|
|
$mock->shouldReceive('push')->once();
|
|
|
|
return $mock;
|
|
});
|
|
|
|
$dispatcher->dispatch(m::mock('Illuminate\Contracts\Queue\ShouldQueue'));
|
|
}
|
|
|
|
public function testCommandsThatShouldQueueIsQueuedUsingCustomHandler()
|
|
{
|
|
$container = new Container();
|
|
$dispatcher = new Dispatcher($container, function () {
|
|
$mock = m::mock('Illuminate\Contracts\Queue\Queue');
|
|
$mock->shouldReceive('push')->once();
|
|
|
|
return $mock;
|
|
});
|
|
|
|
$dispatcher->dispatch(new BusDispatcherTestCustomQueueCommand());
|
|
}
|
|
|
|
public function testCommandsThatShouldQueueIsQueuedUsingCustomQueueAndDelay()
|
|
{
|
|
$container = new Container();
|
|
$dispatcher = new Dispatcher($container, function () {
|
|
$mock = m::mock('Illuminate\Contracts\Queue\Queue');
|
|
$mock->shouldReceive('laterOn')->once()->with('foo', 10, m::type('BusDispatcherTestSpecificQueueAndDelayCommand'));
|
|
|
|
return $mock;
|
|
});
|
|
|
|
$dispatcher->dispatch(new BusDispatcherTestSpecificQueueAndDelayCommand());
|
|
}
|
|
|
|
public function testHandlersThatShouldQueueIsQueued()
|
|
{
|
|
$container = new Container();
|
|
$dispatcher = new Dispatcher($container, function () {
|
|
$mock = m::mock('Illuminate\Contracts\Queue\Queue');
|
|
$mock->shouldReceive('push')->once();
|
|
|
|
return $mock;
|
|
});
|
|
$dispatcher->mapUsing(function () { return 'BusDispatcherTestQueuedHandler@handle'; });
|
|
|
|
$dispatcher->dispatch(new BusDispatcherTestBasicCommand());
|
|
}
|
|
|
|
public function testDispatchNowShouldNeverQueue()
|
|
{
|
|
$container = new Container();
|
|
$handler = m::mock('StdClass');
|
|
$handler->shouldReceive('handle')->once()->andReturn('foo');
|
|
$container->instance('Handler', $handler);
|
|
$dispatcher = new Dispatcher($container);
|
|
$dispatcher->mapUsing(function () { return 'Handler@handle'; });
|
|
|
|
$result = $dispatcher->dispatch(m::mock('Illuminate\Contracts\Queue\ShouldQueue'));
|
|
$this->assertEquals('foo', $result);
|
|
}
|
|
|
|
public function testDispatchShouldCallAfterResolvingIfCommandNotQueued()
|
|
{
|
|
$container = new Container();
|
|
$handler = m::mock('StdClass')->shouldIgnoreMissing();
|
|
$handler->shouldReceive('after')->once();
|
|
$container->instance('Handler', $handler);
|
|
$dispatcher = new Dispatcher($container);
|
|
$dispatcher->mapUsing(function () { return 'Handler@handle'; });
|
|
|
|
$dispatcher->dispatch(new BusDispatcherTestBasicCommand(), function ($handler) { $handler->after(); });
|
|
}
|
|
|
|
public function testDispatchingFromArray()
|
|
{
|
|
$instance = new Dispatcher(new Container());
|
|
$result = $instance->dispatchFromArray('BusDispatcherTestSelfHandlingCommand', ['firstName' => 'taylor', 'lastName' => 'otwell']);
|
|
$this->assertEquals('taylor otwell', $result);
|
|
}
|
|
|
|
public function testMarshallArguments()
|
|
{
|
|
$instance = new Dispatcher(new Container());
|
|
$result = $instance->dispatchFromArray('BusDispatcherTestArgumentMapping', ['flag' => false, 'emptyString' => '']);
|
|
$this->assertTrue($result);
|
|
}
|
|
}
|
|
|
|
class BusDispatcherTestBasicCommand
|
|
{
|
|
}
|
|
|
|
class BusDispatcherTestArgumentMapping implements Illuminate\Contracts\Bus\SelfHandling
|
|
{
|
|
public $flag, $emptyString;
|
|
|
|
public function __construct($flag, $emptyString)
|
|
{
|
|
$this->flag = $flag;
|
|
$this->emptyString = $emptyString;
|
|
}
|
|
|
|
public function handle()
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
class BusDispatcherTestSelfHandlingCommand implements Illuminate\Contracts\Bus\SelfHandling
|
|
{
|
|
public $firstName, $lastName;
|
|
|
|
public function __construct($firstName, $lastName)
|
|
{
|
|
$this->firstName = $firstName;
|
|
$this->lastName = $lastName;
|
|
}
|
|
|
|
public function handle()
|
|
{
|
|
return $this->firstName.' '.$this->lastName;
|
|
}
|
|
}
|
|
|
|
class BusDispatcherTestQueuedHandler implements Illuminate\Contracts\Queue\ShouldQueue
|
|
{
|
|
}
|
|
|
|
class BusDispatcherTestCustomQueueCommand implements Illuminate\Contracts\Queue\ShouldQueue
|
|
{
|
|
public function queue($queue, $command)
|
|
{
|
|
$queue->push($command);
|
|
}
|
|
}
|
|
|
|
class BusDispatcherTestSpecificQueueAndDelayCommand implements Illuminate\Contracts\Queue\ShouldQueue
|
|
{
|
|
public $queue = 'foo';
|
|
public $delay = 10;
|
|
}
|