1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
<?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 Symfony\Component\Mailer\Transport\TransportInterface;
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(TransportInterface::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;
}
}
|