/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php
https://gitlab.com/jjpa2018/dashboard · PHP · 433 lines · 197 code · 58 blank · 178 comment · 9 complexity · ba383ed33f6c17c73aa78affd47e7b83 MD5 · raw file
- <?php
- namespace Illuminate\Support\Testing\Fakes;
- use Closure;
- use Illuminate\Contracts\Mail\Factory;
- use Illuminate\Contracts\Mail\Mailable;
- use Illuminate\Contracts\Mail\Mailer;
- use Illuminate\Contracts\Mail\MailQueue;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Support\Traits\ReflectsClosures;
- use PHPUnit\Framework\Assert as PHPUnit;
- class MailFake implements Factory, Mailer, MailQueue
- {
- use ReflectsClosures;
- /**
- * The mailer currently being used to send a message.
- *
- * @var string
- */
- protected $currentMailer;
- /**
- * All of the mailables that have been sent.
- *
- * @var array
- */
- protected $mailables = [];
- /**
- * All of the mailables that have been queued.
- *
- * @var array
- */
- protected $queuedMailables = [];
- /**
- * Assert if a mailable was sent based on a truth-test callback.
- *
- * @param string|\Closure $mailable
- * @param callable|int|null $callback
- * @return void
- */
- public function assertSent($mailable, $callback = null)
- {
- [$mailable, $callback] = $this->prepareMailableAndCallback($mailable, $callback);
- if (is_numeric($callback)) {
- return $this->assertSentTimes($mailable, $callback);
- }
- $message = "The expected [{$mailable}] mailable was not sent.";
- if (count($this->queuedMailables) > 0) {
- $message .= ' Did you mean to use assertQueued() instead?';
- }
- PHPUnit::assertTrue(
- $this->sent($mailable, $callback)->count() > 0,
- $message
- );
- }
- /**
- * Assert if a mailable was sent a number of times.
- *
- * @param string $mailable
- * @param int $times
- * @return void
- */
- protected function assertSentTimes($mailable, $times = 1)
- {
- $count = $this->sent($mailable)->count();
- PHPUnit::assertSame(
- $times, $count,
- "The expected [{$mailable}] mailable was sent {$count} times instead of {$times} times."
- );
- }
- /**
- * Determine if a mailable was not sent or queued to be sent based on a truth-test callback.
- *
- * @param string|\Closure $mailable
- * @param callable|null $callback
- * @return void
- */
- public function assertNotOutgoing($mailable, $callback = null)
- {
- $this->assertNotSent($mailable, $callback);
- $this->assertNotQueued($mailable, $callback);
- }
- /**
- * Determine if a mailable was not sent based on a truth-test callback.
- *
- * @param string|\Closure $mailable
- * @param callable|null $callback
- * @return void
- */
- public function assertNotSent($mailable, $callback = null)
- {
- [$mailable, $callback] = $this->prepareMailableAndCallback($mailable, $callback);
- PHPUnit::assertCount(
- 0, $this->sent($mailable, $callback),
- "The unexpected [{$mailable}] mailable was sent."
- );
- }
- /**
- * Assert that no mailables were sent or queued to be sent.
- *
- * @return void
- */
- public function assertNothingOutgoing()
- {
- $this->assertNothingSent();
- $this->assertNothingQueued();
- }
- /**
- * Assert that no mailables were sent.
- *
- * @return void
- */
- public function assertNothingSent()
- {
- $mailableNames = collect($this->mailables)->map(function ($mailable) {
- return get_class($mailable);
- })->join(', ');
- PHPUnit::assertEmpty($this->mailables, 'The following mailables were sent unexpectedly: '.$mailableNames);
- }
- /**
- * Assert if a mailable was queued based on a truth-test callback.
- *
- * @param string|\Closure $mailable
- * @param callable|int|null $callback
- * @return void
- */
- public function assertQueued($mailable, $callback = null)
- {
- [$mailable, $callback] = $this->prepareMailableAndCallback($mailable, $callback);
- if (is_numeric($callback)) {
- return $this->assertQueuedTimes($mailable, $callback);
- }
- PHPUnit::assertTrue(
- $this->queued($mailable, $callback)->count() > 0,
- "The expected [{$mailable}] mailable was not queued."
- );
- }
- /**
- * Assert if a mailable was queued a number of times.
- *
- * @param string $mailable
- * @param int $times
- * @return void
- */
- protected function assertQueuedTimes($mailable, $times = 1)
- {
- $count = $this->queued($mailable)->count();
- PHPUnit::assertSame(
- $times, $count,
- "The expected [{$mailable}] mailable was queued {$count} times instead of {$times} times."
- );
- }
- /**
- * Determine if a mailable was not queued based on a truth-test callback.
- *
- * @param string|\Closure $mailable
- * @param callable|null $callback
- * @return void
- */
- public function assertNotQueued($mailable, $callback = null)
- {
- [$mailable, $callback] = $this->prepareMailableAndCallback($mailable, $callback);
- PHPUnit::assertCount(
- 0, $this->queued($mailable, $callback),
- "The unexpected [{$mailable}] mailable was queued."
- );
- }
- /**
- * Assert that no mailables were queued.
- *
- * @return void
- */
- public function assertNothingQueued()
- {
- $mailableNames = collect($this->queuedMailables)->map(function ($mailable) {
- return get_class($mailable);
- })->join(', ');
- PHPUnit::assertEmpty($this->queuedMailables, 'The following mailables were queued unexpectedly: '.$mailableNames);
- }
- /**
- * Get all of the mailables matching a truth-test callback.
- *
- * @param string|\Closure $mailable
- * @param callable|null $callback
- * @return \Illuminate\Support\Collection
- */
- public function sent($mailable, $callback = null)
- {
- [$mailable, $callback] = $this->prepareMailableAndCallback($mailable, $callback);
- if (! $this->hasSent($mailable)) {
- return collect();
- }
- $callback = $callback ?: function () {
- return true;
- };
- return $this->mailablesOf($mailable)->filter(function ($mailable) use ($callback) {
- return $callback($mailable);
- });
- }
- /**
- * Determine if the given mailable has been sent.
- *
- * @param string $mailable
- * @return bool
- */
- public function hasSent($mailable)
- {
- return $this->mailablesOf($mailable)->count() > 0;
- }
- /**
- * Get all of the queued mailables matching a truth-test callback.
- *
- * @param string|\Closure $mailable
- * @param callable|null $callback
- * @return \Illuminate\Support\Collection
- */
- public function queued($mailable, $callback = null)
- {
- [$mailable, $callback] = $this->prepareMailableAndCallback($mailable, $callback);
- if (! $this->hasQueued($mailable)) {
- return collect();
- }
- $callback = $callback ?: function () {
- return true;
- };
- return $this->queuedMailablesOf($mailable)->filter(function ($mailable) use ($callback) {
- return $callback($mailable);
- });
- }
- /**
- * Determine if the given mailable has been queued.
- *
- * @param string $mailable
- * @return bool
- */
- public function hasQueued($mailable)
- {
- return $this->queuedMailablesOf($mailable)->count() > 0;
- }
- /**
- * Get all of the mailed mailables for a given type.
- *
- * @param string $type
- * @return \Illuminate\Support\Collection
- */
- protected function mailablesOf($type)
- {
- return collect($this->mailables)->filter(function ($mailable) use ($type) {
- return $mailable instanceof $type;
- });
- }
- /**
- * Get all of the mailed mailables for a given type.
- *
- * @param string $type
- * @return \Illuminate\Support\Collection
- */
- protected function queuedMailablesOf($type)
- {
- return collect($this->queuedMailables)->filter(function ($mailable) use ($type) {
- return $mailable instanceof $type;
- });
- }
- /**
- * Get a mailer instance by name.
- *
- * @param string|null $name
- * @return \Illuminate\Contracts\Mail\Mailer
- */
- public function mailer($name = null)
- {
- $this->currentMailer = $name;
- return $this;
- }
- /**
- * Begin the process of mailing a mailable class instance.
- *
- * @param mixed $users
- * @return \Illuminate\Mail\PendingMail
- */
- public function to($users)
- {
- return (new PendingMailFake($this))->to($users);
- }
- /**
- * Begin the process of mailing a mailable class instance.
- *
- * @param mixed $users
- * @return \Illuminate\Mail\PendingMail
- */
- public function bcc($users)
- {
- return (new PendingMailFake($this))->bcc($users);
- }
- /**
- * Send a new message with only a raw text part.
- *
- * @param string $text
- * @param \Closure|string $callback
- * @return void
- */
- public function raw($text, $callback)
- {
- //
- }
- /**
- * Send a new message using a view.
- *
- * @param \Illuminate\Contracts\Mail\Mailable|string|array $view
- * @param array $data
- * @param \Closure|string|null $callback
- * @return void
- */
- public function send($view, array $data = [], $callback = null)
- {
- if (! $view instanceof Mailable) {
- return;
- }
- $view->mailer($this->currentMailer);
- $this->currentMailer = null;
- if ($view instanceof ShouldQueue) {
- return $this->queue($view, $data);
- }
- $this->mailables[] = $view;
- }
- /**
- * Queue a new e-mail message for sending.
- *
- * @param \Illuminate\Contracts\Mail\Mailable|string|array $view
- * @param string|null $queue
- * @return mixed
- */
- public function queue($view, $queue = null)
- {
- if (! $view instanceof Mailable) {
- return;
- }
- $view->mailer($this->currentMailer);
- $this->currentMailer = null;
- $this->queuedMailables[] = $view;
- }
- /**
- * Queue a new e-mail message for sending after (n) seconds.
- *
- * @param \DateTimeInterface|\DateInterval|int $delay
- * @param \Illuminate\Contracts\Mail\Mailable|string|array $view
- * @param string|null $queue
- * @return mixed
- */
- public function later($delay, $view, $queue = null)
- {
- $this->queue($view, $queue);
- }
- /**
- * Get the array of failed recipients.
- *
- * @return array
- */
- public function failures()
- {
- return [];
- }
- /**
- * Infer mailable class using reflection if a typehinted closure is passed to assertion.
- *
- * @param string|\Closure $mailable
- * @param callable|null $callback
- * @return array
- */
- protected function prepareMailableAndCallback($mailable, $callback)
- {
- if ($mailable instanceof Closure) {
- return [$this->firstClosureParameterType($mailable), $mailable];
- }
- return [$mailable, $callback];
- }
- }