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 112 113 114
|
<?php
namespace Illuminate\Tests\Integration\Notifications;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notifiable;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Schema;
use Orchestra\Testbench\TestCase;
class SendingMailableNotificationsTest extends TestCase
{
use RefreshDatabase;
protected function defineEnvironment($app)
{
$app['config']->set('mail.driver', 'array');
$app['config']->set('app.locale', 'en');
$app['config']->set('mail.markdown.theme', 'blank');
$app['view']->addLocation(__DIR__.'/Fixtures');
}
protected function afterRefreshingDatabase()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('email');
$table->string('name')->nullable();
});
}
protected function beforeRefreshingDatabase()
{
Schema::dropIfExists('users');
}
public function testMarkdownNotification()
{
$user = MailableNotificationUser::forceCreate([
'email' => 'nuno@laravel.com',
]);
$user->notify(new MarkdownNotification());
$email = app('mailer')->getSymfonyTransport()->messages()[0]->getOriginalMessage()->toString();
$cid = explode(' cid:', str($email)->explode("\r\n")
->filter(fn ($line) => str_contains($line, 'Embed content: cid:'))
->first())[1];
$this->assertStringContainsString(<<<EOT
Content-Type: application/x-php; name=$cid\r
Content-Transfer-Encoding: base64\r
Content-Disposition: inline; name=$cid; filename=$cid\r
EOT, $email);
}
public function testCanSetTheme()
{
$user = MailableNotificationUser::forceCreate([
'email' => 'nuno@laravel.com',
]);
$user->notify(new MarkdownNotification('color-test'));
$mailTransport = app('mailer')->getSymfonyTransport();
$contents = $mailTransport->messages()[0]->getOriginalMessage()->toString();
$this->assertStringContainsString('<body style=3D"color: test;">', $contents);
// confirm passing no theme resets to the app's default theme
$user->notify(new MarkdownNotification());
$contents = $mailTransport->messages()[1]->getOriginalMessage()->toString();
$this->assertStringNotContainsString('<body style=3D"color: test;">', $contents);
}
}
class MailableNotificationUser extends Model
{
use Notifiable;
public $table = 'users';
public $timestamps = false;
}
class MarkdownNotification extends Notification
{
public function __construct(
protected $theme = null
) {
}
public function via($notifiable): array
{
return ['mail'];
}
public function toMail($notifiable): MailMessage
{
$message = (new MailMessage)->markdown('markdown');
if (! is_null($this->theme)) {
$message->theme($this->theme);
}
return $message;
}
}
|