133 lines
3.3 KiB
PHP
133 lines
3.3 KiB
PHP
<?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|int|null $callback
|
|
* @return void
|
|
*/
|
|
public function assertDispatched($command, $callback = null)
|
|
{
|
|
if (is_numeric($callback)) {
|
|
return $this->assertDispatchedTimes($command, $callback);
|
|
}
|
|
|
|
PHPUnit::assertTrue(
|
|
$this->dispatched($command, $callback)->count() > 0,
|
|
"The expected [{$command}] job was not dispatched."
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Assert if a job was pushed a number of times.
|
|
*
|
|
* @param string $command
|
|
* @param int $times
|
|
* @return void
|
|
*/
|
|
protected function assertDispatchedTimes($command, $times = 1)
|
|
{
|
|
PHPUnit::assertTrue(
|
|
($count = $this->dispatched($command)->count()) === $times,
|
|
"The expected [{$command}] job was pushed {$count} times instead of {$times} times."
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 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)
|
|
{
|
|
//
|
|
}
|
|
}
|