|
@@ -0,0 +1,76 @@
|
|
|
+from django.core.urlresolvers import reverse
|
|
|
+from django.utils import timezone
|
|
|
+
|
|
|
+from misago.acl.testutils import override_acl
|
|
|
+from misago.forums.models import Forum
|
|
|
+from misago.users.testutils import UserTestCase, AuthenticatedUserTestCase
|
|
|
+
|
|
|
+from misago.threads import testutils
|
|
|
+from misago.threads.models import ThreadParticipant
|
|
|
+
|
|
|
+
|
|
|
+class AuthenticatedTests(AuthenticatedUserTestCase):
|
|
|
+ def test_empty_threads_list(self):
|
|
|
+ """empty threads list is rendered"""
|
|
|
+ response = self.client.get(reverse('misago:private_threads'))
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
+ self.assertIn("You are not participating in any private threads.",
|
|
|
+ response.content)
|
|
|
+
|
|
|
+ def test_cant_use_threads_list(self):
|
|
|
+ """user has no permission to use private threads"""
|
|
|
+ override_acl(self.user, {'can_use_private_threads': False})
|
|
|
+
|
|
|
+ response = self.client.get(reverse('misago:private_threads'))
|
|
|
+ self.assertEqual(response.status_code, 403)
|
|
|
+ self.assertIn("use private threads system.",
|
|
|
+ response.content)
|
|
|
+
|
|
|
+ def test_participating_threads_list(self):
|
|
|
+ """private threads list displays threads user participates in"""
|
|
|
+ override_acl(self.user, {'can_moderate_private_threads': False})
|
|
|
+
|
|
|
+ forum = Forum.objects.private_threads()
|
|
|
+ invisible_threads = [testutils.post_thread(forum) for t in xrange(10)]
|
|
|
+ visible_threads = [testutils.post_thread(forum) for t in xrange(10)]
|
|
|
+
|
|
|
+ for thread in visible_threads:
|
|
|
+ ThreadParticipant.objects.set_owner(thread, self.user)
|
|
|
+
|
|
|
+ # only threads user participates in are displayed
|
|
|
+ response = self.client.get(reverse('misago:private_threads'))
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
+
|
|
|
+ for thread in invisible_threads:
|
|
|
+ self.assertNotIn(thread.get_absolute_url(), response.content)
|
|
|
+ for thread in visible_threads:
|
|
|
+ self.assertIn(thread.get_absolute_url(), response.content)
|
|
|
+
|
|
|
+ def test_reported_threads_list(self):
|
|
|
+ """private threads list displays threads with reports"""
|
|
|
+ override_acl(self.user, {'can_moderate_private_threads': True})
|
|
|
+
|
|
|
+ forum = Forum.objects.private_threads()
|
|
|
+ invisible_threads = [testutils.post_thread(forum) for t in xrange(10)]
|
|
|
+ visible_threads = [testutils.post_thread(forum) for t in xrange(10)]
|
|
|
+
|
|
|
+ for thread in visible_threads:
|
|
|
+ thread.has_reported_posts = True
|
|
|
+ thread.save()
|
|
|
+
|
|
|
+ # only threads user participates in are displayed
|
|
|
+ response = self.client.get(reverse('misago:private_threads'))
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
+
|
|
|
+ for thread in invisible_threads:
|
|
|
+ self.assertNotIn(thread.get_absolute_url(), response.content)
|
|
|
+ for thread in visible_threads:
|
|
|
+ self.assertIn(thread.get_absolute_url(), response.content)
|
|
|
+
|
|
|
+
|
|
|
+class AnonymousTests(UserTestCase):
|
|
|
+ def test_anon_access_to_view(self):
|
|
|
+ """anonymous user has no access to private threads list"""
|
|
|
+ response = self.client.get(reverse('misago:private_threads'))
|
|
|
+ self.assertEqual(response.status_code, 403)
|
|
|
+ self.assertIn("use private threads system.", response.content)
|