import pytest from notifications.cache import build_unread_summary from notifications.models import Notification from procurement.models import ProcurementRequest from procurement.notifications.read_service import ProcurementNotificationReadService @pytest.mark.django_db def test_subscription_unread_count_and_read_isolation(user_factory, department_factory): user = user_factory() other_user = user_factory() department = department_factory(name="Тестовый отдел") standard = ProcurementRequest.objects.create( title="Закупка", department=department, requestor=user ) subscription = ProcurementRequest.objects.create( title="Подписка", department=department, requestor=user, request_type=ProcurementRequest.RequestType.SUBSCRIPTION, ) Notification.objects.bulk_create( [ Notification( recipient=user, verb="procurement_department_request", data={"request_id": standard.id}, ), Notification( recipient=user, verb="procurement_pending_approval", data={"request_id": subscription.id}, ), Notification( recipient=user, verb="procurement_department_request", data={"request_id": str(subscription.id)}, ), Notification( recipient=user, verb="procurement_approved", data={"request_id": subscription.id}, unread=False, ), Notification( recipient=other_user, verb="procurement_approved", data={"request_id": subscription.id}, ), ] ) assert build_unread_summary(user.id)["procurement_subscription_unread"] == 2 service = ProcurementNotificationReadService() service.mark_request_notifications_as_read(user=user, procurement_request=standard) assert build_unread_summary(user.id)["procurement_subscription_unread"] == 2 service.mark_request_notifications_as_read( user=user, procurement_request=subscription ) assert build_unread_summary(user.id)["procurement_subscription_unread"] == 0