Files
portal/app/tests/Feature/Notifications/InAppNotificationTest.php
T

43 lines
1.9 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Models\InAppNotification;
use App\Models\Tenant;
use App\Models\User;
use App\Services\NotificationService;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Mail;
/**
* Тесты in-app канала уведомлений (schema v8.10 in_app_notifications).
*
* Тесты через ProcessWebhookJob удалены — job убран как legacy-рудимент.
* Оставлен прямой вызов NotificationService::notifyInApp.
*/
uses(DatabaseTransactions::class);
beforeEach(function () {
Mail::fake();
});
test('NotificationService::notifyInApp: вызов напрямую создаёт row', function () {
$tenant = Tenant::factory()->create();
$user = User::factory()->create(['tenant_id' => $tenant->id]);
$service = app(NotificationService::class);
$service->notifyInApp($user, 'new_lead', 'Срок касания', 'Перезвонить клиенту через 30 мин', ['deal_id' => 42]);
// 🔴 Ищем СВОЮ запись, а не первую попавшуюся в таблице. Раньше здесь стояло
// ->first() без отбора: в общем прогоне тест подхватывал чужое уведомление,
// оставшееся от соседа, и падал с «ждали new_lead, получили ad_moderation» —
// при полностью исправном коде. Замер 01.08.2026.
$notif = InAppNotification::query()->where('user_id', $user->id)->first();
expect($notif)->not->toBeNull();
expect($notif->event)->toBe('new_lead');
expect($notif->title)->toBe('Срок касания');
expect($notif->body)->toBe('Перезвонить клиенту через 30 мин');
expect($notif->deal_id)->toBe(42);
expect($notif->payload['deal_id'])->toBe(42);
});