NotificationRoutesNotificationsTest.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace Illuminate\Tests\Notifications;
  3. use Illuminate\Container\Container;
  4. use Illuminate\Contracts\Notifications\Dispatcher;
  5. use Illuminate\Notifications\RoutesNotifications;
  6. use Illuminate\Support\Facades\Notification;
  7. use InvalidArgumentException;
  8. use Mockery as m;
  9. use PHPUnit\Framework\TestCase;
  10. use stdClass;
  11. class NotificationRoutesNotificationsTest extends TestCase
  12. {
  13. protected function tearDown(): void
  14. {
  15. m::close();
  16. Container::setInstance(null);
  17. }
  18. public function testNotificationCanBeDispatched()
  19. {
  20. $container = new Container;
  21. $factory = m::mock(Dispatcher::class);
  22. $container->instance(Dispatcher::class, $factory);
  23. $notifiable = new RoutesNotificationsTestInstance;
  24. $instance = new stdClass;
  25. $factory->shouldReceive('send')->with($notifiable, $instance);
  26. Container::setInstance($container);
  27. $notifiable->notify($instance);
  28. }
  29. public function testNotificationCanBeSentNow()
  30. {
  31. $container = new Container;
  32. $factory = m::mock(Dispatcher::class);
  33. $container->instance(Dispatcher::class, $factory);
  34. $notifiable = new RoutesNotificationsTestInstance;
  35. $instance = new stdClass;
  36. $factory->shouldReceive('sendNow')->with($notifiable, $instance, null);
  37. Container::setInstance($container);
  38. $notifiable->notifyNow($instance);
  39. }
  40. public function testNotificationOptionRouting()
  41. {
  42. $instance = new RoutesNotificationsTestInstance;
  43. $this->assertSame('bar', $instance->routeNotificationFor('foo'));
  44. $this->assertSame('taylor@laravel.com', $instance->routeNotificationFor('mail'));
  45. }
  46. public function testOnDemandNotificationsCannotUseDatabaseChannel()
  47. {
  48. $this->expectExceptionObject(
  49. new InvalidArgumentException('The database channel does not support on-demand notifications.')
  50. );
  51. Notification::route('database', 'foo');
  52. }
  53. }
  54. class RoutesNotificationsTestInstance
  55. {
  56. use RoutesNotifications;
  57. protected $email = 'taylor@laravel.com';
  58. public function routeNotificationForFoo()
  59. {
  60. return 'bar';
  61. }
  62. }