2017-09-12 18:12:11 -03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Illuminate\Tests\Notifications;
|
|
|
|
|
|
2022-06-08 05:11:13 +10:00
|
|
|
use Illuminate\Contracts\Mail\Attachable;
|
|
|
|
|
use Illuminate\Mail\Attachment;
|
2017-09-12 18:17:30 -03:00
|
|
|
use Illuminate\Notifications\Messages\MailMessage;
|
2019-09-10 17:16:05 +02:00
|
|
|
use PHPUnit\Framework\TestCase;
|
2017-09-12 18:12:11 -03:00
|
|
|
|
2018-01-05 16:26:15 +01:00
|
|
|
class NotificationMailMessageTest extends TestCase
|
2017-09-12 18:12:11 -03:00
|
|
|
{
|
2018-04-30 18:42:28 +01:00
|
|
|
public function testTemplate()
|
2017-09-12 18:12:11 -03:00
|
|
|
{
|
2018-04-30 18:42:28 +01:00
|
|
|
$message = new MailMessage;
|
|
|
|
|
|
2019-08-27 14:48:17 +02:00
|
|
|
$this->assertSame('notifications::email', $message->markdown);
|
2018-04-30 18:42:28 +01:00
|
|
|
|
|
|
|
|
$message->template('notifications::foo');
|
|
|
|
|
|
2019-08-27 14:48:17 +02:00
|
|
|
$this->assertSame('notifications::foo', $message->markdown);
|
2017-09-12 18:12:11 -03:00
|
|
|
}
|
2020-08-01 09:31:41 -05:00
|
|
|
|
2020-08-11 15:23:45 +02:00
|
|
|
public function testHtmlAndPlainView()
|
|
|
|
|
{
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
|
|
|
|
|
$this->assertNull($message->view);
|
|
|
|
|
$this->assertSame([], $message->viewData);
|
|
|
|
|
|
|
|
|
|
$message->view(['notifications::foo', 'notifications::bar'], [
|
|
|
|
|
'foo' => 'bar',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$this->assertSame('notifications::foo', $message->view[0]);
|
|
|
|
|
$this->assertSame('notifications::bar', $message->view[1]);
|
|
|
|
|
$this->assertSame(['foo' => 'bar'], $message->viewData);
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-01 16:31:16 +02:00
|
|
|
public function testHtmlView()
|
|
|
|
|
{
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
|
2020-08-11 15:23:45 +02:00
|
|
|
$this->assertNull($message->view);
|
2020-08-01 16:31:16 +02:00
|
|
|
$this->assertSame([], $message->viewData);
|
|
|
|
|
|
|
|
|
|
$message->view('notifications::foo', [
|
|
|
|
|
'foo' => 'bar',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$this->assertSame('notifications::foo', $message->view);
|
|
|
|
|
$this->assertSame(['foo' => 'bar'], $message->viewData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testPlainView()
|
|
|
|
|
{
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
|
2020-08-11 15:23:45 +02:00
|
|
|
$this->assertNull($message->view);
|
2020-08-01 16:31:16 +02:00
|
|
|
$this->assertSame([], $message->viewData);
|
|
|
|
|
|
2020-08-11 15:23:45 +02:00
|
|
|
$message->view([null, 'notifications::foo'], [
|
2020-08-01 16:31:16 +02:00
|
|
|
'foo' => 'bar',
|
|
|
|
|
]);
|
|
|
|
|
|
2020-08-11 15:23:45 +02:00
|
|
|
$this->assertSame('notifications::foo', $message->view[1]);
|
2020-08-01 16:31:16 +02:00
|
|
|
$this->assertSame(['foo' => 'bar'], $message->viewData);
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-30 18:42:28 +01:00
|
|
|
public function testCcIsSetCorrectly()
|
|
|
|
|
{
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->cc('test@example.com');
|
|
|
|
|
|
|
|
|
|
$this->assertSame([['test@example.com', null]], $message->cc);
|
|
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->cc('test@example.com')
|
2025-01-23 16:39:11 -06:00
|
|
|
->cc('test@example.com', 'Test');
|
2018-04-30 18:42:28 +01:00
|
|
|
|
|
|
|
|
$this->assertSame([['test@example.com', null], ['test@example.com', 'Test']], $message->cc);
|
2018-07-31 19:40:52 +08:00
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->cc(['test@example.com', 'Test' => 'test@example.com']);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([['test@example.com', null], ['test@example.com', 'Test']], $message->cc);
|
2025-04-15 17:25:43 +02:00
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->cc('test@example.com', 'Test')
|
|
|
|
|
->cc(['test@example.com', 'test2@example.com']);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([
|
|
|
|
|
['test@example.com', 'Test'],
|
|
|
|
|
['test@example.com', null],
|
|
|
|
|
['test2@example.com', null],
|
|
|
|
|
], $message->cc);
|
2018-04-30 18:42:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testBccIsSetCorrectly()
|
2017-09-12 18:12:11 -03:00
|
|
|
{
|
2018-04-30 18:42:28 +01:00
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->bcc('test@example.com');
|
|
|
|
|
|
|
|
|
|
$this->assertSame([['test@example.com', null]], $message->bcc);
|
|
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->bcc('test@example.com')
|
2025-01-23 16:39:11 -06:00
|
|
|
->bcc('test@example.com', 'Test');
|
2018-04-30 18:42:28 +01:00
|
|
|
|
|
|
|
|
$this->assertSame([['test@example.com', null], ['test@example.com', 'Test']], $message->bcc);
|
2018-07-31 19:40:52 +08:00
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->bcc(['test@example.com', 'Test' => 'test@example.com']);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([['test@example.com', null], ['test@example.com', 'Test']], $message->bcc);
|
2025-04-15 17:25:43 +02:00
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->bcc('test@example.com', 'Test')
|
|
|
|
|
->bcc(['test@example.com', 'test2@example.com']);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([
|
|
|
|
|
['test@example.com', 'Test'],
|
|
|
|
|
['test@example.com', null],
|
|
|
|
|
['test2@example.com', null],
|
|
|
|
|
], $message->bcc);
|
2018-04-30 18:42:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testReplyToIsSetCorrectly()
|
|
|
|
|
{
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->replyTo('test@example.com');
|
|
|
|
|
|
|
|
|
|
$this->assertSame([['test@example.com', null]], $message->replyTo);
|
2017-09-12 18:12:11 -03:00
|
|
|
|
2018-04-30 18:42:28 +01:00
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->replyTo('test@example.com')
|
2025-01-23 16:39:11 -06:00
|
|
|
->replyTo('test@example.com', 'Test');
|
2017-09-12 18:12:11 -03:00
|
|
|
|
2018-04-30 18:42:28 +01:00
|
|
|
$this->assertSame([['test@example.com', null], ['test@example.com', 'Test']], $message->replyTo);
|
2018-07-31 19:40:52 +08:00
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->replyTo(['test@example.com', 'Test' => 'test@example.com']);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([['test@example.com', null], ['test@example.com', 'Test']], $message->replyTo);
|
2025-04-15 17:25:43 +02:00
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->replyTo('test@example.com', 'Test')
|
|
|
|
|
->replyTo(['test@example.com', 'test2@example.com']);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([
|
|
|
|
|
['test@example.com', 'Test'],
|
|
|
|
|
['test@example.com', null],
|
|
|
|
|
['test2@example.com', null],
|
|
|
|
|
], $message->replyTo);
|
2017-09-12 18:12:11 -03:00
|
|
|
}
|
2019-05-15 17:48:05 +10:00
|
|
|
|
2022-02-15 16:00:01 +01:00
|
|
|
public function testMetadataIsSetCorrectly()
|
|
|
|
|
{
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->metadata('origin', 'test-suite');
|
|
|
|
|
$message->metadata('user_id', 1);
|
|
|
|
|
|
|
|
|
|
$this->assertArrayHasKey('origin', $message->metadata);
|
|
|
|
|
$this->assertSame('test-suite', $message->metadata['origin']);
|
|
|
|
|
$this->assertArrayHasKey('user_id', $message->metadata);
|
|
|
|
|
$this->assertSame(1, $message->metadata['user_id']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testTagIsSetCorrectly()
|
|
|
|
|
{
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
$message->tag('test');
|
|
|
|
|
|
|
|
|
|
$this->assertContains('test', $message->tags);
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-15 17:48:05 +10:00
|
|
|
public function testCallbackIsSetCorrectly()
|
|
|
|
|
{
|
|
|
|
|
$callback = function () {
|
|
|
|
|
//
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$message = new MailMessage;
|
2021-09-14 15:57:25 +02:00
|
|
|
$message->withSymfonyMessage($callback);
|
2019-05-15 17:48:05 +10:00
|
|
|
|
|
|
|
|
$this->assertSame([$callback], $message->callbacks);
|
|
|
|
|
}
|
2020-10-13 15:50:06 +02:00
|
|
|
|
|
|
|
|
public function testWhenCallback()
|
|
|
|
|
{
|
|
|
|
|
$callback = function (MailMessage $mailMessage, $condition) {
|
|
|
|
|
$this->assertTrue($condition);
|
|
|
|
|
|
|
|
|
|
$mailMessage->cc('cc@example.com');
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->when(true, $callback);
|
|
|
|
|
$this->assertSame([['cc@example.com', null]], $message->cc);
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->when(false, $callback);
|
|
|
|
|
$this->assertSame([], $message->cc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testWhenCallbackWithReturn()
|
|
|
|
|
{
|
|
|
|
|
$callback = function (MailMessage $mailMessage, $condition) {
|
|
|
|
|
$this->assertTrue($condition);
|
|
|
|
|
|
|
|
|
|
return $mailMessage->cc('cc@example.com');
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->when(true, $callback)->bcc('bcc@example.com');
|
|
|
|
|
$this->assertSame([['cc@example.com', null]], $message->cc);
|
|
|
|
|
$this->assertSame([['bcc@example.com', null]], $message->bcc);
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->when(false, $callback)->bcc('bcc@example.com');
|
|
|
|
|
$this->assertSame([], $message->cc);
|
|
|
|
|
$this->assertSame([['bcc@example.com', null]], $message->bcc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testWhenCallbackWithDefault()
|
|
|
|
|
{
|
|
|
|
|
$callback = function (MailMessage $mailMessage, $condition) {
|
2021-03-18 22:28:17 +01:00
|
|
|
$this->assertSame('truthy', $condition);
|
2020-10-13 15:50:06 +02:00
|
|
|
|
|
|
|
|
$mailMessage->cc('truthy@example.com');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$default = function (MailMessage $mailMessage, $condition) {
|
|
|
|
|
$this->assertEquals(0, $condition);
|
|
|
|
|
|
|
|
|
|
$mailMessage->cc('zero@example.com');
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->when('truthy', $callback, $default);
|
|
|
|
|
$this->assertSame([['truthy@example.com', null]], $message->cc);
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->when(0, $callback, $default);
|
|
|
|
|
$this->assertSame([['zero@example.com', null]], $message->cc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUnlessCallback()
|
|
|
|
|
{
|
|
|
|
|
$callback = function (MailMessage $mailMessage, $condition) {
|
|
|
|
|
$this->assertFalse($condition);
|
|
|
|
|
|
|
|
|
|
$mailMessage->cc('test@example.com');
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->unless(false, $callback);
|
|
|
|
|
$this->assertSame([['test@example.com', null]], $message->cc);
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->unless(true, $callback);
|
|
|
|
|
$this->assertSame([], $message->cc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUnlessCallbackWithReturn()
|
|
|
|
|
{
|
|
|
|
|
$callback = function (MailMessage $mailMessage, $condition) {
|
|
|
|
|
$this->assertFalse($condition);
|
|
|
|
|
|
|
|
|
|
return $mailMessage->cc('cc@example.com');
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->unless(false, $callback)->bcc('bcc@example.com');
|
|
|
|
|
$this->assertSame([['cc@example.com', null]], $message->cc);
|
|
|
|
|
$this->assertSame([['bcc@example.com', null]], $message->bcc);
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->unless(true, $callback)->bcc('bcc@example.com');
|
|
|
|
|
$this->assertSame([], $message->cc);
|
|
|
|
|
$this->assertSame([['bcc@example.com', null]], $message->bcc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUnlessCallbackWithDefault()
|
|
|
|
|
{
|
|
|
|
|
$callback = function (MailMessage $mailMessage, $condition) {
|
|
|
|
|
$this->assertEquals(0, $condition);
|
|
|
|
|
|
|
|
|
|
$mailMessage->cc('zero@example.com');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$default = function (MailMessage $mailMessage, $condition) {
|
2021-03-18 22:28:17 +01:00
|
|
|
$this->assertSame('truthy', $condition);
|
2020-10-13 15:50:06 +02:00
|
|
|
|
|
|
|
|
$mailMessage->cc('truthy@example.com');
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->unless(0, $callback, $default);
|
|
|
|
|
$this->assertSame([['zero@example.com', null]], $message->cc);
|
|
|
|
|
|
2021-03-19 01:05:33 +01:00
|
|
|
$message = new MailMessage;
|
2020-10-13 15:50:06 +02:00
|
|
|
$message->unless('truthy', $callback, $default);
|
|
|
|
|
$this->assertSame([['truthy@example.com', null]], $message->cc);
|
|
|
|
|
}
|
2022-06-08 05:11:13 +10:00
|
|
|
|
|
|
|
|
public function testItAttachesFilesViaAttachableContractFromPath()
|
|
|
|
|
{
|
|
|
|
|
$message = new MailMessage;
|
|
|
|
|
|
|
|
|
|
$message->attach(new class() implements Attachable
|
|
|
|
|
{
|
|
|
|
|
public function toMailAttachment()
|
|
|
|
|
{
|
|
|
|
|
return Attachment::fromPath('/foo.jpg')->as('bar')->withMime('image/png');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$this->assertSame([
|
|
|
|
|
'file' => '/foo.jpg',
|
|
|
|
|
'options' => [
|
|
|
|
|
'as' => 'bar',
|
|
|
|
|
'mime' => 'image/png',
|
|
|
|
|
],
|
|
|
|
|
], $message->attachments[0]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testItAttachesFilesViaAttachableContractFromData()
|
|
|
|
|
{
|
|
|
|
|
$mailMessage = new MailMessage();
|
|
|
|
|
|
|
|
|
|
$mailMessage->attach(new class() implements Attachable
|
|
|
|
|
{
|
|
|
|
|
public function toMailAttachment()
|
|
|
|
|
{
|
|
|
|
|
return Attachment::fromData(fn () => 'bar', 'foo.jpg')->withMime('image/png');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$this->assertSame([
|
|
|
|
|
'data' => 'bar',
|
|
|
|
|
'name' => 'foo.jpg',
|
|
|
|
|
'options' => [
|
|
|
|
|
'mime' => 'image/png',
|
|
|
|
|
],
|
|
|
|
|
], $mailMessage->rawAttachments[0]);
|
|
|
|
|
}
|
2023-06-05 00:03:27 +08:00
|
|
|
|
|
|
|
|
public function testItAttachesManyFiles()
|
|
|
|
|
{
|
|
|
|
|
$mailMessage = new MailMessage();
|
|
|
|
|
$attachable = new class() implements Attachable
|
|
|
|
|
{
|
|
|
|
|
public function toMailAttachment()
|
|
|
|
|
{
|
|
|
|
|
return Attachment::fromData(fn () => 'bar', 'foo.jpg')->withMime('image/png');
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$mailMessage->attachMany([
|
|
|
|
|
$attachable,
|
|
|
|
|
'/path/to/forge.svg',
|
|
|
|
|
'/path/to/vapor.svg' => [
|
|
|
|
|
'as' => 'Logo.svg',
|
|
|
|
|
'mime' => 'image/svg+xml',
|
|
|
|
|
],
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([
|
|
|
|
|
[
|
|
|
|
|
'data' => 'bar',
|
|
|
|
|
'name' => 'foo.jpg',
|
|
|
|
|
'options' => [
|
|
|
|
|
'mime' => 'image/png',
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
], $mailMessage->rawAttachments);
|
|
|
|
|
|
|
|
|
|
$this->assertSame([
|
|
|
|
|
[
|
|
|
|
|
'file' => '/path/to/forge.svg',
|
|
|
|
|
'options' => [],
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
'file' => '/path/to/vapor.svg',
|
|
|
|
|
'options' => [
|
|
|
|
|
'as' => 'Logo.svg',
|
|
|
|
|
'mime' => 'image/svg+xml',
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
], $mailMessage->attachments);
|
|
|
|
|
}
|
2017-09-13 08:20:20 -05:00
|
|
|
}
|