loko/streetup/notifications/tests.py

62 lines
3.1 KiB
Python

from django.test import TestCase
from django.urls import reverse
from django.contrib.auth import get_user_model
from notifications.models import Discussion, Message
User = get_user_model()
class DiscussionListTests(TestCase):
def setUp(self):
self.user1 = User.objects.create_user(username='user1', password='pass')
self.user2 = User.objects.create_user(username='user2', password='pass')
self.user3 = User.objects.create_user(username='user3', password='pass')
def test_discussion_list_filtering(self):
# Discussion 1: created by user1
d1 = Discussion.objects.create(title="Discussion 1", created_by=self.user1)
d1.participants.add(self.user1, self.user2, self.user3)
# Discussion 2: created by user2, user1 wrote a message
d2 = Discussion.objects.create(title="Discussion 2", created_by=self.user2)
d2.participants.add(self.user1, self.user2, self.user3)
Message.objects.create(discussion=d2, author=self.user1, content="Hello from user1")
# Discussion 3: created by user2, user1 is tagged
d3 = Discussion.objects.create(title="Discussion 3", created_by=self.user2)
d3.participants.add(self.user1, self.user2, self.user3)
Message.objects.create(discussion=d3, author=self.user2, content=f"Hello @[User 1](u:{self.user1.pk})")
# Discussion 4: created by user2, user3 participant but user1 is NOT author and NOT tagged
d4 = Discussion.objects.create(title="Discussion 4", created_by=self.user2)
d4.participants.add(self.user1, self.user2, self.user3)
# Discussion 5: auto-created intervention discussion with created_by=user1, but user1 never posted a message and was never tagged
from django.contrib.contenttypes.models import ContentType
ct = ContentType.objects.get_for_model(User)
d5 = Discussion.objects.create(title="Discussion 5", created_by=self.user1, content_type=ct, object_id=1)
Message.objects.create(discussion=d5, author=self.user2, content="Hello user3")
self.client.force_login(self.user1)
response = self.client.get(reverse('notifications:discussion_list'))
self.assertEqual(response.status_code, 200)
discussions_in_context = [item['discussion'] for item in response.context['items']]
self.assertIn(d1, discussions_in_context)
self.assertIn(d2, discussions_in_context)
self.assertIn(d3, discussions_in_context)
self.assertNotIn(d4, discussions_in_context)
self.assertNotIn(d5, discussions_in_context)
def test_discussion_create(self):
self.client.force_login(self.user1)
response = self.client.post(reverse('notifications:discussion_create'), {
'title': 'Sujet test',
'content': f'Bonjour @[User 2](u:{self.user2.pk})',
})
self.assertEqual(response.status_code, 302)
discussion = Discussion.objects.get(title='Sujet test')
self.assertEqual(discussion.created_by, self.user1)
self.assertIn(self.user1, discussion.participants.all())
self.assertIn(self.user2, discussion.participants.all())
self.assertEqual(discussion.messages.count(), 1)