51 lines
1.7 KiB
PHP
51 lines
1.7 KiB
PHP
<?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());
|
|
}
|
|
}
|