| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- <?php
- namespace Illuminate\Tests\Support;
- use Illuminate\Contracts\Mail\Mailable as MailableContract;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Contracts\Translation\HasLocalePreference;
- use Illuminate\Mail\Mailable;
- use Illuminate\Support\Testing\Fakes\MailFake;
- use PHPUnit\Framework\Constraint\ExceptionMessage;
- use PHPUnit\Framework\ExpectationFailedException;
- use PHPUnit\Framework\TestCase;
- class SupportTestingMailFakeTest extends TestCase
- {
- /**
- * @var \Illuminate\Support\Testing\Fakes\MailFake
- */
- private $fake;
- /**
- * @var \Illuminate\Tests\Support\MailableStub
- */
- private $mailable;
- protected function setUp(): void
- {
- parent::setUp();
- $this->fake = new MailFake;
- $this->mailable = new MailableStub;
- }
- public function testAssertSent()
- {
- try {
- $this->fake->assertSent(MailableStub::class);
- $this->fail();
- } catch (ExpectationFailedException $e) {
- $this->assertThat($e, new ExceptionMessage('The expected [Illuminate\Tests\Support\MailableStub] mailable was not sent.'));
- }
- $this->fake->to('taylor@laravel.com')->send($this->mailable);
- $this->fake->assertSent(MailableStub::class);
- }
- public function testAssertSentWhenRecipientHasPreferredLocale()
- {
- $user = new LocalizedRecipientStub;
- $this->fake->to($user)->send($this->mailable);
- $this->fake->assertSent(MailableStub::class, function ($mail) use ($user) {
- return $mail->hasTo($user) && $mail->locale === 'au';
- });
- }
- public function testAssertNotSent()
- {
- $this->fake->assertNotSent(MailableStub::class);
- $this->fake->to('taylor@laravel.com')->send($this->mailable);
- try {
- $this->fake->assertNotSent(MailableStub::class);
- $this->fail();
- } catch (ExpectationFailedException $e) {
- $this->assertThat($e, new ExceptionMessage('The unexpected [Illuminate\Tests\Support\MailableStub] mailable was sent.'));
- }
- }
- public function testAssertNotSentWithClosure()
- {
- $callback = function (MailableStub $mail) {
- return $mail->hasTo('taylor@laravel.com');
- };
- $this->fake->assertNotSent($callback);
- $this->fake->to('taylor@laravel.com')->send($this->mailable);
- $this->expectException(ExpectationFailedException::class);
- $this->expectExceptionMessageMatches('/The unexpected \['.preg_quote(MailableStub::class, '/').'\] mailable was sent./m');
- $this->fake->assertNotSent($callback);
- }
- public function testAssertSentTimes()
- {
- $this->fake->to('taylor@laravel.com')->send($this->mailable);
- $this->fake->to('taylor@laravel.com')->send($this->mailable);
- try {
- $this->fake->assertSent(MailableStub::class, 1);
- $this->fail();
- } catch (ExpectationFailedException $e) {
- $this->assertThat($e, new ExceptionMessage('The expected [Illuminate\Tests\Support\MailableStub] mailable was sent 2 times instead of 1 times.'));
- }
- $this->fake->assertSent(MailableStub::class, 2);
- }
- public function testAssertQueued()
- {
- try {
- $this->fake->assertQueued(MailableStub::class);
- $this->fail();
- } catch (ExpectationFailedException $e) {
- $this->assertThat($e, new ExceptionMessage('The expected [Illuminate\Tests\Support\MailableStub] mailable was not queued.'));
- }
- $this->fake->to('taylor@laravel.com')->queue($this->mailable);
- $this->fake->assertQueued(MailableStub::class);
- }
- public function testAssertQueuedTimes()
- {
- $this->fake->to('taylor@laravel.com')->queue($this->mailable);
- $this->fake->to('taylor@laravel.com')->queue($this->mailable);
- try {
- $this->fake->assertQueued(MailableStub::class, 1);
- $this->fail();
- } catch (ExpectationFailedException $e) {
- $this->assertThat($e, new ExceptionMessage('The expected [Illuminate\Tests\Support\MailableStub] mailable was queued 2 times instead of 1 times.'));
- }
- $this->fake->assertQueued(MailableStub::class, 2);
- }
- public function testSendQueuesAMailableThatShouldBeQueued()
- {
- $this->fake->to('taylor@laravel.com')->send(new QueueableMailableStub);
- $this->fake->assertQueued(QueueableMailableStub::class);
- try {
- $this->fake->assertSent(QueueableMailableStub::class);
- $this->fail();
- } catch (ExpectationFailedException $e) {
- $this->assertThat($e, new ExceptionMessage('The expected [Illuminate\Tests\Support\QueueableMailableStub] mailable was not sent.'));
- }
- }
- public function testAssertNothingSent()
- {
- $this->fake->assertNothingSent();
- $this->fake->to('taylor@laravel.com')->send($this->mailable);
- try {
- $this->fake->assertNothingSent();
- $this->fail();
- } catch (ExpectationFailedException $e) {
- $this->assertThat($e, new ExceptionMessage('The following mailables were sent unexpectedly: Illuminate\Tests\Support\MailableStub'));
- }
- }
- public function testAssertNothingQueued()
- {
- $this->fake->assertNothingQueued();
- $this->fake->to('taylor@laravel.com')->queue($this->mailable);
- try {
- $this->fake->assertNothingQueued();
- $this->fail();
- } catch (ExpectationFailedException $e) {
- $this->assertThat($e, new ExceptionMessage('The following mailables were queued unexpectedly: Illuminate\Tests\Support\MailableStub'));
- }
- }
- public function testAssertQueuedWithClosure()
- {
- $this->fake->to($user = new LocalizedRecipientStub)->queue($this->mailable);
- $this->fake->assertQueued(function (MailableStub $mail) use ($user) {
- return $mail->hasTo($user);
- });
- }
- public function testAssertSentWithClosure()
- {
- $this->fake->to($user = new LocalizedRecipientStub)->send($this->mailable);
- $this->fake->assertSent(function (MailableStub $mail) use ($user) {
- return $mail->hasTo($user);
- });
- }
- }
- class MailableStub extends Mailable implements MailableContract
- {
- public $framework = 'Laravel';
- protected $version = '6.0';
- /**
- * Build the message.
- *
- * @return $this
- */
- public function build()
- {
- $this->with('first_name', 'Taylor')
- ->withLastName('Otwell');
- }
- }
- class QueueableMailableStub extends Mailable implements ShouldQueue
- {
- public $framework = 'Laravel';
- protected $version = '6.0';
- /**
- * Build the message.
- *
- * @return $this
- */
- public function build()
- {
- $this->with('first_name', 'Taylor')
- ->withLastName('Otwell');
- }
- }
- class LocalizedRecipientStub implements HasLocalePreference
- {
- public $email = 'taylor@laravel.com';
- public function preferredLocale()
- {
- return 'au';
- }
- }
|