mirror of
https://github.com/ae-utbm/sith.git
synced 2025-09-13 19:45:50 +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
|