268 lines
6.1 KiB
PHP
268 lines
6.1 KiB
PHP
<?php
|
|
|
|
namespace Illuminate\Support\Testing\Fakes;
|
|
|
|
use Illuminate\Queue\QueueManager;
|
|
use Illuminate\Contracts\Queue\Queue;
|
|
use PHPUnit\Framework\Assert as PHPUnit;
|
|
|
|
class QueueFake extends QueueManager implements Queue
|
|
{
|
|
/**
|
|
* All of the jobs that have been pushed.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $jobs = [];
|
|
|
|
/**
|
|
* Assert if a job was pushed based on a truth-test callback.
|
|
*
|
|
* @param string $job
|
|
* @param callable|int|null $callback
|
|
* @return void
|
|
*/
|
|
public function assertPushed($job, $callback = null)
|
|
{
|
|
if (is_numeric($callback)) {
|
|
return $this->assertPushedTimes($job, $callback);
|
|
}
|
|
|
|
PHPUnit::assertTrue(
|
|
$this->pushed($job, $callback)->count() > 0,
|
|
"The expected [{$job}] job was not pushed."
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Assert if a job was pushed a number of times.
|
|
*
|
|
* @param string $job
|
|
* @param int $times
|
|
* @return void
|
|
*/
|
|
protected function assertPushedTimes($job, $times = 1)
|
|
{
|
|
PHPUnit::assertTrue(
|
|
($count = $this->pushed($job)->count()) === $times,
|
|
"The expected [{$job}] job was pushed {$count} times instead of {$times} times."
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Assert if a job was pushed based on a truth-test callback.
|
|
*
|
|
* @param string $queue
|
|
* @param string $job
|
|
* @param callable|null $callback
|
|
* @return void
|
|
*/
|
|
public function assertPushedOn($queue, $job, $callback = null)
|
|
{
|
|
return $this->assertPushed($job, function ($job, $pushedQueue) use ($callback, $queue) {
|
|
if ($pushedQueue !== $queue) {
|
|
return false;
|
|
}
|
|
|
|
return $callback ? $callback(...func_get_args()) : true;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Determine if a job was pushed based on a truth-test callback.
|
|
*
|
|
* @param string $job
|
|
* @param callable|null $callback
|
|
* @return void
|
|
*/
|
|
public function assertNotPushed($job, $callback = null)
|
|
{
|
|
PHPUnit::assertTrue(
|
|
$this->pushed($job, $callback)->count() === 0,
|
|
"The unexpected [{$job}] job was pushed."
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Assert that no jobs were pushed.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function assertNothingPushed()
|
|
{
|
|
PHPUnit::assertEmpty($this->jobs, 'Jobs were pushed unexpectedly.');
|
|
}
|
|
|
|
/**
|
|
* Get all of the jobs matching a truth-test callback.
|
|
*
|
|
* @param string $job
|
|
* @param callable|null $callback
|
|
* @return \Illuminate\Support\Collection
|
|
*/
|
|
public function pushed($job, $callback = null)
|
|
{
|
|
if (! $this->hasPushed($job)) {
|
|
return collect();
|
|
}
|
|
|
|
$callback = $callback ?: function () {
|
|
return true;
|
|
};
|
|
|
|
return collect($this->jobs[$job])->filter(function ($data) use ($callback) {
|
|
return $callback($data['job'], $data['queue']);
|
|
})->pluck('job');
|
|
}
|
|
|
|
/**
|
|
* Determine if there are any stored jobs for a given class.
|
|
*
|
|
* @param string $job
|
|
* @return bool
|
|
*/
|
|
public function hasPushed($job)
|
|
{
|
|
return isset($this->jobs[$job]) && ! empty($this->jobs[$job]);
|
|
}
|
|
|
|
/**
|
|
* Resolve a queue connection instance.
|
|
*
|
|
* @param mixed $value
|
|
* @return \Illuminate\Contracts\Queue\Queue
|
|
*/
|
|
public function connection($value = null)
|
|
{
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get the size of the queue.
|
|
*
|
|
* @param string $queue
|
|
* @return int
|
|
*/
|
|
public function size($queue = null)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* Push a new job onto the queue.
|
|
*
|
|
* @param string $job
|
|
* @param mixed $data
|
|
* @param string $queue
|
|
* @return mixed
|
|
*/
|
|
public function push($job, $data = '', $queue = null)
|
|
{
|
|
$this->jobs[is_object($job) ? get_class($job) : $job][] = [
|
|
'job' => $job,
|
|
'queue' => $queue,
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Push a raw payload onto the queue.
|
|
*
|
|
* @param string $payload
|
|
* @param string $queue
|
|
* @param array $options
|
|
* @return mixed
|
|
*/
|
|
public function pushRaw($payload, $queue = null, array $options = [])
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Push a new job onto the queue after a delay.
|
|
*
|
|
* @param \DateTime|int $delay
|
|
* @param string $job
|
|
* @param mixed $data
|
|
* @param string $queue
|
|
* @return mixed
|
|
*/
|
|
public function later($delay, $job, $data = '', $queue = null)
|
|
{
|
|
return $this->push($job, $data, $queue);
|
|
}
|
|
|
|
/**
|
|
* Push a new job onto the queue.
|
|
*
|
|
* @param string $queue
|
|
* @param string $job
|
|
* @param mixed $data
|
|
* @return mixed
|
|
*/
|
|
public function pushOn($queue, $job, $data = '')
|
|
{
|
|
return $this->push($job, $data, $queue);
|
|
}
|
|
|
|
/**
|
|
* Push a new job onto the queue after a delay.
|
|
*
|
|
* @param string $queue
|
|
* @param \DateTime|int $delay
|
|
* @param string $job
|
|
* @param mixed $data
|
|
* @return mixed
|
|
*/
|
|
public function laterOn($queue, $delay, $job, $data = '')
|
|
{
|
|
return $this->push($job, $data, $queue);
|
|
}
|
|
|
|
/**
|
|
* Pop the next job off of the queue.
|
|
*
|
|
* @param string $queue
|
|
* @return \Illuminate\Contracts\Queue\Job|null
|
|
*/
|
|
public function pop($queue = null)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Push an array of jobs onto the queue.
|
|
*
|
|
* @param array $jobs
|
|
* @param mixed $data
|
|
* @param string $queue
|
|
* @return mixed
|
|
*/
|
|
public function bulk($jobs, $data = '', $queue = null)
|
|
{
|
|
foreach ($jobs as $job) {
|
|
$this->push($job, $data, $queue);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the connection name for the queue.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getConnectionName()
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Set the connection name for the queue.
|
|
*
|
|
* @param string $name
|
|
* @return $this
|
|
*/
|
|
public function setConnectionName($name)
|
|
{
|
|
return $this;
|
|
}
|
|
}
|