test_threadview.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from misago.acl.testutils import override_acl
  2. from misago.users.testutils import AuthenticatedUserTestCase
  3. from misago.categories.models import Category
  4. from misago.threads import testutils
  5. from misago.threads.models import Thread
  6. class ThreadViewTestCase(AuthenticatedUserTestCase):
  7. def setUp(self):
  8. super(ThreadViewTestCase, self).setUp()
  9. self.category = Category.objects.get(slug='first-category')
  10. self.thread = testutils.post_thread(category=self.category)
  11. def override_acl(self, acl=None):
  12. final_acl = {
  13. 'can_see': 1,
  14. 'can_browse': 1,
  15. 'can_see_all_threads': 1,
  16. 'can_see_own_threads': 0,
  17. 'can_hide_threads': 0,
  18. 'can_approve_content': 0,
  19. 'can_edit_posts': 0,
  20. 'can_hide_posts': 0,
  21. 'can_hide_own_posts': 0,
  22. }
  23. if acl:
  24. final_acl.update(acl)
  25. override_acl(self.user, {
  26. 'categories': {
  27. self.category.pk: final_acl
  28. }
  29. })
  30. class ThreadVisibilityTests(ThreadViewTestCase):
  31. def test_thread_displays(self):
  32. """thread view has no showstoppers"""
  33. response = self.client.get(self.thread.get_absolute_url())
  34. self.assertContains(response, self.thread.title)
  35. def test_view_shows_owner_thread(self):
  36. """view handles "owned threads only"""
  37. self.override_acl({
  38. 'can_see_all_threads': 0
  39. })
  40. response = self.client.get(self.thread.get_absolute_url())
  41. self.assertEqual(response.status_code, 404)
  42. self.thread.starter = self.user
  43. self.thread.save()
  44. self.override_acl({
  45. 'can_see_all_threads': 0
  46. })
  47. response = self.client.get(self.thread.get_absolute_url())
  48. self.assertContains(response, self.thread.title)
  49. def test_view_validates_category_permissions(self):
  50. """view validates category visiblity"""
  51. self.override_acl({
  52. 'can_see': 0
  53. })
  54. response = self.client.get(self.thread.get_absolute_url())
  55. self.assertEqual(response.status_code, 404)
  56. self.override_acl({
  57. 'can_browse': 0
  58. })
  59. response = self.client.get(self.thread.get_absolute_url())
  60. self.assertEqual(response.status_code, 404)