add notifications logic and add support of both JWT and Sanctum

This commit is contained in:
root
2026-03-11 01:20:31 -04:00
parent f6be51576c
commit 182036cc41
141 changed files with 8685 additions and 648 deletions
@@ -0,0 +1,50 @@
<?php
namespace Tests\Unit\Services\Notifications;
use App\Models\Notification;
use App\Models\UserNotification;
use App\Services\Notifications\NotificationDispatchService;
use App\Services\Notifications\NotificationRecipientService;
use App\Services\Notifications\NotificationSendService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Mockery;
use Tests\TestCase;
class NotificationSendServiceTest extends TestCase
{
use RefreshDatabase;
public function test_send_creates_notification_and_user_notifications(): void
{
$recipients = Mockery::mock(NotificationRecipientService::class);
$recipients->shouldReceive('getRecipients')
->with('parent')
->andReturn([
['id' => 10, 'email' => 'parent1@example.com', 'phone' => '5551112222'],
['id' => 11, 'email' => 'parent2@example.com', 'phone' => null],
]);
$dispatcher = Mockery::mock(NotificationDispatchService::class);
$dispatcher->shouldReceive('sendEmail')->once();
$dispatcher->shouldReceive('sendSms')->once();
$service = new NotificationSendService($recipients, $dispatcher);
$result = $service->send([
'title' => 'Announcement',
'message' => 'Hello parents',
'target_group' => 'parent',
'channels' => ['in_app', 'email', 'sms'],
], 99);
$this->assertTrue($result['ok']);
$this->assertSame(2, $result['recipient_count']);
$this->assertDatabaseHas('notifications', [
'title' => 'Announcement',
'target_group' => 'parent',
]);
$this->assertSame(1, Notification::query()->count());
$this->assertSame(2, UserNotification::query()->count());
}
}