import pytest from django.urls import reverse from rest_framework import status from notifications.models import Notification @pytest.mark.unit @pytest.mark.django_db class TestNotificationsAPI: """Test Notifications API""" @pytest.fixture(autouse=True) def setup_test(self, add_user_with_permissions, django_user_model): self.admin = django_user_model.objects.get() self.user = add_user_with_permissions(username='test_user', password='TesTPasWord1', is_superuser=True) self.notification = Notification.objects.create(text='Notification') def test_notifications_list(self, api_client): api_client.force_authenticate(self.user) url = reverse('notifications-list') response = api_client.get(url) assert response.status_code == status.HTTP_200_OK assert response.json()['count'] == 1 Notification.objects.create(text='Notification2') response = api_client.get(url) assert response.status_code == status.HTTP_200_OK assert response.json()['count'] == 2 def test_user_sees_only_his_notification(self, api_client): api_client.force_authenticate(self.admin) url = reverse('notifications-list') Notification.objects.create(text='Notification2', recipient=self.user) assert Notification.objects.count() == 2 response = api_client.get(url) assert response.status_code == status.HTTP_200_OK assert response.json()['count'] == 1 def test_read_notification(self, api_client): api_client.force_authenticate(self.user) url = reverse('notifications-read', args=[self.notification.pk]) assert self.notification.is_read is False response = api_client.post(url) assert response.status_code == status.HTTP_200_OK assert response.json()['is_read'] is True assert Notification.objects.get().is_read is True def test_read_notification_but_not_found(self, api_client): api_client.force_authenticate(self.user) url = reverse('notifications-read', args=[555]) response = api_client.post(url) assert response.status_code == status.HTTP_404_NOT_FOUND assert Notification.objects.get().is_read is False