123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- namespace Illuminate\Tests\Mail;
- use Illuminate\Bus\Queueable;
- use Illuminate\Container\Container;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Contracts\View\Factory;
- use Illuminate\Filesystem\Filesystem;
- use Illuminate\Filesystem\FilesystemManager;
- use Illuminate\Foundation\Application;
- use Illuminate\Mail\Mailable;
- use Illuminate\Mail\Mailer;
- use Illuminate\Mail\SendQueuedMailable;
- use Illuminate\Support\Testing\Fakes\QueueFake;
- use Mockery as m;
- use PHPUnit\Framework\TestCase;
- use Swift_Mailer;
- class MailableQueuedTest extends TestCase
- {
- protected function tearDown(): void
- {
- m::close();
- }
- public function testQueuedMailableSent()
- {
- $queueFake = new QueueFake(new Application);
- $mailer = $this->getMockBuilder(Mailer::class)
- ->setConstructorArgs($this->getMocks())
- ->onlyMethods(['createMessage', 'to'])
- ->getMock();
- $mailer->setQueue($queueFake);
- $mailable = new MailableQueueableStub;
- $queueFake->assertNothingPushed();
- $mailer->send($mailable);
- $queueFake->assertPushedOn(null, SendQueuedMailable::class);
- }
- public function testQueuedMailableWithAttachmentSent()
- {
- $queueFake = new QueueFake(new Application);
- $mailer = $this->getMockBuilder(Mailer::class)
- ->setConstructorArgs($this->getMocks())
- ->onlyMethods(['createMessage'])
- ->getMock();
- $mailer->setQueue($queueFake);
- $mailable = new MailableQueueableStub;
- $attachmentOption = ['mime' => 'image/jpeg', 'as' => 'bar.jpg'];
- $mailable->attach('foo.jpg', $attachmentOption);
- $this->assertIsArray($mailable->attachments);
- $this->assertCount(1, $mailable->attachments);
- $this->assertEquals($mailable->attachments[0]['options'], $attachmentOption);
- $queueFake->assertNothingPushed();
- $mailer->send($mailable);
- $queueFake->assertPushedOn(null, SendQueuedMailable::class);
- }
- public function testQueuedMailableWithAttachmentFromDiskSent()
- {
- $app = new Application;
- $container = Container::getInstance();
- $this->getMockBuilder(Filesystem::class)
- ->getMock();
- $filesystemFactory = $this->getMockBuilder(FilesystemManager::class)
- ->setConstructorArgs([$app])
- ->getMock();
- $container->singleton('filesystem', function () use ($filesystemFactory) {
- return $filesystemFactory;
- });
- $queueFake = new QueueFake($app);
- $mailer = $this->getMockBuilder(Mailer::class)
- ->setConstructorArgs($this->getMocks())
- ->onlyMethods(['createMessage'])
- ->getMock();
- $mailer->setQueue($queueFake);
- $mailable = new MailableQueueableStub;
- $attachmentOption = ['mime' => 'image/jpeg', 'as' => 'bar.jpg'];
- $mailable->attachFromStorage('/', 'foo.jpg', $attachmentOption);
- $this->assertIsArray($mailable->diskAttachments);
- $this->assertCount(1, $mailable->diskAttachments);
- $this->assertEquals($mailable->diskAttachments[0]['options'], $attachmentOption);
- $queueFake->assertNothingPushed();
- $mailer->send($mailable);
- $queueFake->assertPushedOn(null, SendQueuedMailable::class);
- }
- protected function getMocks()
- {
- return ['smtp', m::mock(Factory::class), m::mock(Swift_Mailer::class)];
- }
- }
- class MailableQueueableStub extends Mailable implements ShouldQueue
- {
- use Queueable;
- public function build(): self
- {
- $this
- ->subject('lorem ipsum')
- ->html('foo bar baz')
- ->to('foo@example.tld');
- return $this;
- }
- }
|