From 5bd56e353df7ee06f35fd58d874b2c44d61168d5 Mon Sep 17 00:00:00 2001 From: Dwight Watson Date: Fri, 15 Nov 2024 10:54:51 +1100 Subject: [PATCH] Revert "Dispatch additional events" --- src/FcmChannel.php | 43 ++++++++++++++++++---------------------- tests/FcmChannelTest.php | 30 +++------------------------- 2 files changed, 22 insertions(+), 51 deletions(-) diff --git a/src/FcmChannel.php b/src/FcmChannel.php index e828ef7..b0d667d 100644 --- a/src/FcmChannel.php +++ b/src/FcmChannel.php @@ -4,8 +4,6 @@ use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Notifications\Events\NotificationFailed; -use Illuminate\Notifications\Events\NotificationSending; -use Illuminate\Notifications\Events\NotificationSent; use Illuminate\Notifications\Notification; use Illuminate\Support\Arr; use Illuminate\Support\Collection; @@ -37,40 +35,37 @@ public function send(mixed $notifiable, Notification $notification): ?Collection { $tokens = Arr::wrap($notifiable->routeNotificationFor('fcm', $notification)); + if (empty($tokens)) { + return null; + } + + $fcmMessage = $notification->toFcm($notifiable); + return Collection::make($tokens) ->chunk(self::TOKENS_PER_REQUEST) - ->map(fn ($tokens) => $this->sendNotifications($notifiable, $notification, $tokens)) - ->map(fn (MulticastSendReport $report) => $this->dispatchEvents($notifiable, $notification, $report)); + ->map(fn ($tokens) => ($fcmMessage->client ?? $this->client)->sendMulticast($fcmMessage, $tokens->all())) + ->map(fn (MulticastSendReport $report) => $this->checkReportForFailures($notifiable, $notification, $report)); } /** - * Send the notification with the provided tokens. + * Handle the report for the notification and dispatch any failed notifications. */ - protected function sendNotifications(mixed $notifiable, Notification $notification, Collection $tokens): MulticastSendReport + protected function checkReportForFailures(mixed $notifiable, Notification $notification, MulticastSendReport $report): MulticastSendReport { - $fcmMessage = $notification->toFcm($notifiable); - - $this->events->dispatch( - new NotificationSending($notifiable, $notification, self::class) - ); + Collection::make($report->getItems()) + ->filter(fn (SendReport $report) => $report->isFailure()) + ->each(fn (SendReport $report) => $this->dispatchFailedNotification($notifiable, $notification, $report)); - return ($fcmMessage->client ?? $this->client)->sendMulticast($fcmMessage, $tokens->all()); + return $report; } /** - * Handle the report for the notification and dispatch any failed notifications. + * Dispatch failed event. */ - protected function dispatchEvents(mixed $notifiable, Notification $notification, MulticastSendReport $report): MulticastSendReport + protected function dispatchFailedNotification(mixed $notifiable, Notification $notification, SendReport $report): void { - Collection::make($report->getItems()) - ->each(function (SendReport $report) use ($notifiable, $notification) { - $event = $report->isSuccess() - ? new NotificationSent($notifiable, $notification, self::class, compact('report')) - : new NotificationFailed($notifiable, $notification, self::class, compact('report')); - - $this->events->dispatch($event); - }); - - return $report; + $this->events->dispatch(new NotificationFailed($notifiable, $notification, self::class, [ + 'report' => $report, + ])); } } diff --git a/tests/FcmChannelTest.php b/tests/FcmChannelTest.php index 868d574..132262e 100644 --- a/tests/FcmChannelTest.php +++ b/tests/FcmChannelTest.php @@ -4,9 +4,6 @@ use Exception; use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Notifications\Events\NotificationFailed; -use Illuminate\Notifications\Events\NotificationSending; -use Illuminate\Notifications\Events\NotificationSent; use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notification; use Illuminate\Support\Collection; @@ -39,14 +36,7 @@ public function test_it_can_be_instantiated() public function test_it_can_send_notifications() { $events = Mockery::mock(Dispatcher::class); - $events->shouldReceive('dispatch') - ->once() - ->with(Mockery::type(NotificationSending::class)); - $events->shouldReceive('dispatch') - ->once() - ->with(Mockery::type(NotificationSent::class)); - $events->shouldNotReceive('dispatch') - ->with(Mockery::type(NotificationFailed::class)); + $events->shouldNotReceive('dispatch'); $firebase = Mockery::mock(Messaging::class); $firebase->shouldReceive('sendMulticast') @@ -66,14 +56,7 @@ public function test_it_can_send_notifications() public function test_it_can_send_notifications_with_custom_client() { $events = Mockery::mock(Dispatcher::class); - $events->shouldReceive('dispatch') - ->once() - ->with(Mockery::type(NotificationSending::class)); - $events->shouldReceive('dispatch') - ->once() - ->with(Mockery::type(NotificationSent::class)); - $events->shouldNotReceive('dispatch') - ->with(Mockery::type(NotificationFailed::class)); + $events->shouldNotReceive('dispatch'); $firebase = Mockery::mock(Messaging::class); $events->shouldNotReceive('sendMulticast'); @@ -95,14 +78,7 @@ public function test_it_can_send_notifications_with_custom_client() public function test_it_can_dispatch_events() { $events = Mockery::mock(Dispatcher::class); - $events->shouldReceive('dispatch') - ->once() - ->with(Mockery::type(NotificationSending::class)); - $events->shouldNotReceive('dispatch') - ->with(Mockery::type(NotificationSent::class)); - $events->shouldReceive('dispatch') - ->once() - ->with(Mockery::type(NotificationFailed::class)); + $events->shouldReceive('dispatch')->once(); $firebase = Mockery::mock(Messaging::class); $firebase->shouldReceive('sendMulticast')