<?php
namespace Illuminate\Support\Testing\Fakes;
use Illuminate\Contracts\Bus\Dispatcher;
use PHPUnit_Framework_Assert as PHPUnit;
class BusFake implements Dispatcher
{
/**
* The commands that have been dispatched.
*
* @var array
*/
protected $commands = [];
/**
* Assert if a job was dispatched based on a truth-test callback.
*
* @param string $command
* @param callable|null $callback
* @return void
*/
public function assertDispatched($command, $callback = null)
{
PHPUnit::assertTrue(
$this->dispatched($command, $callback)->count() > 0,
"The expected [{$command}] job was not dispatched."
);
}
/**
* Determine if a job was dispatched based on a truth-test callback.
*
* @param string $command
* @param callable|null $callback
* @return void
*/
public function assertNotDispatched($command, $callback = null)
{
PHPUnit::assertTrue(
$this->dispatched($command, $callback)->count() === 0,
"The unexpected [{$command}] job was dispatched."
);
}
/**
* Get all of the jobs matching a truth-test callback.
*
* @param string $command
* @param callable|null $callback
* @return \Illuminate\Support\Collection
*/
public function dispatched($command, $callback = null)
{
if (! $this->hasDispatched($command)) {
return collect();
}
$callback = $callback ?: function () {
return true;
};
return collect($this->commands[$command])->filter(function ($command) use ($callback) {
return $callback($command);
});
}
/**
* Determine if there are any stored commands for a given class.
*
* @param string $command
* @return bool
*/
public function hasDispatched($command)
{
return isset($this->commands[$command]) && ! empty($this->commands[$command]);
}
/**
* Dispatch a command to its appropriate handler.
*
* @param mixed $command
* @return mixed
*/
public function dispatch($command)
{
return $this->dispatchNow($command);
}
/**
* Dispatch a command to its appropriate handler in the current process.
*
* @param mixed $command
* @param mixed $handler
* @return mixed
*/
public function dispatchNow($command, $handler = null)
{
$this->commands[get_class($command)][] = $command;
}
/**
* Set the pipes commands should be piped through before dispatching.
*
* @param array $pipes
* @return $this
*/
public function pipeThrough(array $pipes)
{
//
}
}