mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-11-04 11:03:04 +00:00 
			
		
		
		
	Résout trois problèmes : - la création des notifications faisait un N+1 queries - le décompte du nombre de nouvelles à modérer était mauvais - modérer une nouvelle ne modifiait pas les notifications des autres admins
		
			
				
	
	
		
			52 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from datetime import timedelta
 | 
						|
 | 
						|
import pytest
 | 
						|
from django.conf import settings
 | 
						|
from django.utils.timezone import now
 | 
						|
from model_bakery import baker
 | 
						|
 | 
						|
from com.models import News, NewsDate
 | 
						|
from core.baker_recipes import subscriber_user
 | 
						|
from core.models import Group, Notification, User
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.django_db
 | 
						|
def test_notification_created():
 | 
						|
    # this news is unpublished, but is set in the past
 | 
						|
    # it shouldn't be taken into account when counting the number
 | 
						|
    # of news that are to be moderated
 | 
						|
    past_news = baker.make(News, is_published=False)
 | 
						|
    baker.make(NewsDate, news=past_news, start_date=now() - timedelta(days=1))
 | 
						|
    com_admin_group = Group.objects.get(pk=settings.SITH_GROUP_COM_ADMIN_ID)
 | 
						|
    com_admin_group.users.all().delete()
 | 
						|
    Notification.objects.all().delete()
 | 
						|
    com_admin = baker.make(User, groups=[com_admin_group])
 | 
						|
    for i in range(2):
 | 
						|
        # news notifications are permanent, so the notification created
 | 
						|
        # during the first iteration should be reused during the second one.
 | 
						|
        baker.make(News, is_published=False)
 | 
						|
        notifications = list(Notification.objects.all())
 | 
						|
        assert len(notifications) == 1
 | 
						|
        assert notifications[0].user == com_admin
 | 
						|
        assert notifications[0].type == "NEWS_MODERATION"
 | 
						|
        assert notifications[0].param == str(i + 1)
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.django_db
 | 
						|
def test_notification_edited_when_moderating_news():
 | 
						|
    com_admin_group = Group.objects.get(pk=settings.SITH_GROUP_COM_ADMIN_ID)
 | 
						|
    com_admins = subscriber_user.make(_quantity=3)
 | 
						|
    com_admin_group.users.set(com_admins)
 | 
						|
    Notification.objects.all().delete()
 | 
						|
    news = baker.make(News, is_published=False)
 | 
						|
    assert Notification.objects.count() == 3
 | 
						|
    assert Notification.objects.filter(viewed=False).count() == 3
 | 
						|
 | 
						|
    news.is_published = True
 | 
						|
    news.moderator = com_admins[0]
 | 
						|
    news.save()
 | 
						|
    # when the news is moderated, the notification should be marked as read
 | 
						|
    # for all admins
 | 
						|
    assert Notification.objects.count() == 3
 | 
						|
    assert Notification.objects.filter(viewed=False).count() == 0
 |