123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- <?php
-
- namespace Illuminate\Support\Testing\Fakes;
-
- use Illuminate\Contracts\Mail\Mailer;
- use Illuminate\Contracts\Mail\Mailable;
- use PHPUnit\Framework\Assert as PHPUnit;
- use Illuminate\Contracts\Queue\ShouldQueue;
-
- class MailFake implements Mailer
- {
- /**
- * 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 $mailable
- * @param callable|int|null $callback
- * @return void
- */
- public function assertSent($mailable, $callback = null)
- {
- if (is_numeric($callback)) {
- return $this->assertSentTimes($mailable, $callback);
- }
-
- PHPUnit::assertTrue(
- $this->sent($mailable, $callback)->count() > 0,
- "The expected [{$mailable}] mailable was not sent."
- );
- }
-
- /**
- * Assert if a mailable was sent a number of times.
- *
- * @param string $mailable
- * @param int $times
- * @return void
- */
- protected function assertSentTimes($mailable, $times = 1)
- {
- PHPUnit::assertTrue(
- ($count = $this->sent($mailable)->count()) === $times,
- "The expected [{$mailable}] mailable was sent {$count} times instead of {$times} times."
- );
- }
-
- /**
- * Determine if a mailable was not sent based on a truth-test callback.
- *
- * @param string $mailable
- * @param callable|null $callback
- * @return void
- */
- public function assertNotSent($mailable, $callback = null)
- {
- PHPUnit::assertTrue(
- $this->sent($mailable, $callback)->count() === 0,
- "The unexpected [{$mailable}] mailable was sent."
- );
- }
-
- /**
- * Assert that no mailables were sent.
- *
- * @return void
- */
- public function assertNothingSent()
- {
- PHPUnit::assertEmpty($this->mailables, 'Mailables were sent unexpectedly.');
- }
-
- /**
- * Assert if a mailable was queued based on a truth-test callback.
- *
- * @param string $mailable
- * @param callable|int|null $callback
- * @return void
- */
- public function assertQueued($mailable, $callback = null)
- {
- 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)
- {
- PHPUnit::assertTrue(
- ($count = $this->queued($mailable)->count()) === $times,
- "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 $mailable
- * @param callable|null $callback
- * @return void
- */
- public function assertNotQueued($mailable, $callback = null)
- {
- PHPUnit::assertTrue(
- $this->queued($mailable, $callback)->count() === 0,
- "The unexpected [{$mailable}] mailable was queued."
- );
- }
-
- /**
- * Assert that no mailables were queued.
- *
- * @return void
- */
- public function assertNothingQueued()
- {
- PHPUnit::assertEmpty($this->queuedMailables, 'Mailables were queued unexpectedly.');
- }
-
- /**
- * Get all of the mailables matching a truth-test callback.
- *
- * @param string $mailable
- * @param callable|null $callback
- * @return \Illuminate\Support\Collection
- */
- public function sent($mailable, $callback = null)
- {
- 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 $mailable
- * @param callable|null $callback
- * @return \Illuminate\Support\Collection
- */
- public function queued($mailable, $callback = null)
- {
- 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;
- });
- }
-
- /**
- * 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 when only a raw text part.
- *
- * @param string $text
- * @param \Closure|string $callback
- * @return int
- */
- public function raw($text, $callback)
- {
- //
- }
-
- /**
- * Send a new message using a view.
- *
- * @param string|array $view
- * @param array $data
- * @param \Closure|string $callback
- * @return void
- */
- public function send($view, array $data = [], $callback = null)
- {
- if (! $view instanceof Mailable) {
- return;
- }
-
- if ($view instanceof ShouldQueue) {
- return $this->queue($view, $data);
- }
-
- $this->mailables[] = $view;
- }
-
- /**
- * Queue a new e-mail message for sending.
- *
- * @param string|array $view
- * @param string|null $queue
- * @return mixed
- */
- public function queue($view, $queue = null)
- {
- if (! $view instanceof Mailable) {
- return;
- }
-
- $this->queuedMailables[] = $view;
- }
-
- /**
- * Get the array of failed recipients.
- *
- * @return array
- */
- public function failures()
- {
- //
- }
- }
|