PendingChainFake.php
TLDR
The file PendingChainFake.php
is a class that extends the PendingChain
class. It creates a fake pending chain instance to dispatch jobs. It allows dispatching jobs with the given arguments and sets connection, queue, chain, delay, and catch callbacks.
Methods
dispatch
Dispatches the job with the given arguments. It creates a new instance of the job based on the job type (string, Closure, or other). Then it sets the connection, queue, chain, delay, and catch callbacks for the job. Finally, it dispatches the job using the fake bus instance and returns a PendingDispatch
object.
Classes
None
<?php
namespace Illuminate\Support\Testing\Fakes;
use Closure;
use Illuminate\Foundation\Bus\PendingChain;
use Illuminate\Queue\CallQueuedClosure;
class PendingChainFake extends PendingChain
{
/**
* The fake bus instance.
*
* @var \Illuminate\Support\Testing\Fakes\BusFake
*/
protected $bus;
/**
* Create a new pending chain instance.
*
* @param \Illuminate\Support\Testing\Fakes\BusFake $bus
* @param mixed $job
* @param array $chain
* @return void
*/
public function __construct(BusFake $bus, $job, $chain)
{
$this->bus = $bus;
$this->job = $job;
$this->chain = $chain;
}
/**
* Dispatch the job with the given arguments.
*
* @return \Illuminate\Foundation\Bus\PendingDispatch
*/
public function dispatch()
{
if (is_string($this->job)) {
$firstJob = new $this->job(...func_get_args());
} elseif ($this->job instanceof Closure) {
$firstJob = CallQueuedClosure::create($this->job);
} else {
$firstJob = $this->job;
}
$firstJob->allOnConnection($this->connection);
$firstJob->allOnQueue($this->queue);
$firstJob->chain($this->chain);
$firstJob->delay($this->delay);
$firstJob->chainCatchCallbacks = $this->catchCallbacks();
return $this->bus->dispatch($firstJob);
}
}