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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
<?php
namespace Illuminate\Tests\Support;
use Exception;
use Illuminate\Contracts\Translation\HasLocalePreference;
use Illuminate\Foundation\Auth\User;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Collection;
use Illuminate\Support\Testing\Fakes\NotificationFake;
use PHPUnit\Framework\Constraint\ExceptionMessage;
use PHPUnit\Framework\ExpectationFailedException;
use PHPUnit\Framework\TestCase;
class SupportTestingNotificationFakeTest extends TestCase
{
/**
* @var NotificationFake
*/
private $fake;
/**
* @var NotificationStub
*/
private $notification;
/**
* @var UserStub
*/
private $user;
protected function setUp(): void
{
parent::setUp();
$this->fake = new NotificationFake;
$this->notification = new NotificationStub;
$this->user = new UserStub;
}
public function testAssertSentTo()
{
try {
$this->fake->assertSentTo($this->user, NotificationStub::class);
$this->fail();
} catch (ExpectationFailedException $e) {
$this->assertThat($e, new ExceptionMessage('The expected [Illuminate\Tests\Support\NotificationStub] notification was not sent.'));
}
$this->fake->send($this->user, new NotificationStub);
$this->fake->assertSentTo($this->user, NotificationStub::class);
}
public function testAssertNotSentTo()
{
$this->fake->assertNotSentTo($this->user, NotificationStub::class);
$this->fake->send($this->user, new NotificationStub);
try {
$this->fake->assertNotSentTo($this->user, NotificationStub::class);
$this->fail();
} catch (ExpectationFailedException $e) {
$this->assertThat($e, new ExceptionMessage('The unexpected [Illuminate\Tests\Support\NotificationStub] notification was sent.'));
}
}
public function testAssertSentToFailsForEmptyArray()
{
$this->expectException(Exception::class);
$this->fake->assertSentTo([], NotificationStub::class);
}
public function testAssertSentToFailsForEmptyCollection()
{
$this->expectException(Exception::class);
$this->fake->assertSentTo(new Collection, NotificationStub::class);
}
public function testResettingNotificationId()
{
$this->fake->send($this->user, $this->notification);
$id = $this->notification->id;
$this->fake->send($this->user, $this->notification);
$this->assertSame($id, $this->notification->id);
$this->notification->id = null;
$this->fake->send($this->user, $this->notification);
$this->assertNotNull($this->notification->id);
$this->assertNotSame($id, $this->notification->id);
}
public function testAssertTimesSent()
{
$this->fake->assertTimesSent(0, NotificationStub::class);
$this->fake->send($this->user, new NotificationStub);
$this->fake->send($this->user, new NotificationStub);
$this->fake->send(new UserStub, new NotificationStub);
$this->fake->assertTimesSent(3, NotificationStub::class);
}
public function testAssertSentToWhenNotifiableHasPreferredLocale()
{
$user = new LocalizedUserStub;
$this->fake->send($user, new NotificationStub);
$this->fake->assertSentTo($user, NotificationStub::class, function ($notification, $channels, $notifiable, $locale) use ($user) {
return $notifiable === $user && $locale === 'au';
});
}
}
class NotificationStub extends Notification
{
public function via($notifiable)
{
return ['mail'];
}
}
class UserStub extends User
{
//
}
class LocalizedUserStub extends User implements HasLocalePreference
{
public function preferredLocale()
{
return 'au';
}
}
|