test_post_views.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. from django.core.urlresolvers import reverse
  2. from misago.acl.testutils import override_acl
  3. from misago.forums.models import Forum
  4. from misago.users.testutils import AuthenticatedUserTestCase
  5. from misago.threads.models import Thread, Post
  6. from misago.threads.testutils import post_thread, reply_thread
  7. class PostViewTestCase(AuthenticatedUserTestCase):
  8. def setUp(self):
  9. super(PostViewTestCase, self).setUp()
  10. self.forum = Forum.objects.all_forums().filter(role="forum")[:1][0]
  11. self.forum.labels = []
  12. self.thread = post_thread(self.forum)
  13. def override_acl(self, new_acl, forum=None):
  14. new_acl.update({
  15. 'can_see': True,
  16. 'can_browse': True,
  17. 'can_see_all_threads': True,
  18. 'can_see_own_threads': False
  19. })
  20. forum = forum or self.forum
  21. forums_acl = self.user.acl
  22. forums_acl['visible_forums'].append(forum.pk)
  23. forums_acl['forums'][forum.pk] = new_acl
  24. override_acl(self.user, forums_acl)
  25. class ApprovePostViewTests(PostViewTestCase):
  26. def test_approve_thread(self):
  27. """view approves thread"""
  28. self.thread.first_post.is_moderated = True
  29. self.thread.first_post.save()
  30. self.thread.synchronize()
  31. self.thread.save()
  32. post_link = reverse('misago:approve_post', kwargs={
  33. 'post_id': self.thread.first_post_id
  34. })
  35. self.override_acl({'can_review_moderated_content': 1})
  36. response = self.client.post(post_link)
  37. self.assertEqual(response.status_code, 302)
  38. thread = Thread.objects.get(id=self.thread.id)
  39. self.assertFalse(thread.is_moderated)
  40. self.assertFalse(thread.has_moderated_posts)
  41. def test_approve_post(self):
  42. """view approves post"""
  43. post = reply_thread(self.thread, is_moderated=True)
  44. post_link = reverse('misago:approve_post', kwargs={
  45. 'post_id': post.id
  46. })
  47. self.override_acl({'can_review_moderated_content': 1})
  48. response = self.client.post(post_link)
  49. self.assertEqual(response.status_code, 302)
  50. thread = Thread.objects.get(id=self.thread.id)
  51. self.assertFalse(thread.has_moderated_posts)
  52. class UnhidePostViewTests(PostViewTestCase):
  53. def test_unhide_first_post(self):
  54. """attempt to reveal first post in thread fails"""
  55. post_link = reverse('misago:unhide_post', kwargs={
  56. 'post_id': self.thread.first_post_id
  57. })
  58. self.override_acl({'can_hide_posts': 2})
  59. response = self.client.post(post_link)
  60. self.assertEqual(response.status_code, 403)
  61. def test_unhide_post_no_permission(self):
  62. """view fails due to lack of permissions"""
  63. post = reply_thread(self.thread, is_hidden=True)
  64. post_link = reverse('misago:unhide_post', kwargs={'post_id': post.id})
  65. self.override_acl({'can_hide_posts': 0, 'can_hide_own_posts': 0})
  66. response = self.client.post(post_link)
  67. self.assertEqual(response.status_code, 403)
  68. def test_unhide_post(self):
  69. """view reveals post"""
  70. post = reply_thread(self.thread, is_hidden=True)
  71. post_link = reverse('misago:unhide_post', kwargs={'post_id': post.id})
  72. self.override_acl({'can_hide_posts': 2})
  73. response = self.client.post(post_link)
  74. self.assertEqual(response.status_code, 302)
  75. post = Post.objects.get(id=post.id)
  76. self.assertFalse(post.is_hidden)
  77. class HidePostViewTests(PostViewTestCase):
  78. def test_hide_first_post(self):
  79. """attempt to hide first post in thread fails"""
  80. post_link = reverse('misago:hide_post', kwargs={
  81. 'post_id': self.thread.first_post_id
  82. })
  83. self.override_acl({'can_hide_posts': 2})
  84. response = self.client.post(post_link)
  85. self.assertEqual(response.status_code, 403)
  86. def test_hide_post_no_permission(self):
  87. """view fails due to lack of permissions"""
  88. post = reply_thread(self.thread)
  89. post_link = reverse('misago:hide_post', kwargs={'post_id': post.id})
  90. self.override_acl({'can_hide_posts': 0, 'can_hide_own_posts': 0})
  91. response = self.client.post(post_link)
  92. self.assertEqual(response.status_code, 403)
  93. def test_hide_post(self):
  94. """view hides post"""
  95. post = reply_thread(self.thread)
  96. post_link = reverse('misago:hide_post', kwargs={'post_id': post.id})
  97. self.override_acl({'can_hide_posts': 2})
  98. response = self.client.post(post_link)
  99. self.assertEqual(response.status_code, 302)
  100. post = Post.objects.get(id=post.id)
  101. self.assertTrue(post.is_hidden)
  102. class DeletePostViewTests(PostViewTestCase):
  103. def test_delete_first_post(self):
  104. """attempt to delete first post in thread fails"""
  105. post_link = reverse('misago:delete_post', kwargs={
  106. 'post_id': self.thread.first_post_id
  107. })
  108. self.override_acl({'can_hide_posts': 2})
  109. response = self.client.post(post_link)
  110. self.assertEqual(response.status_code, 403)
  111. def test_delete_post_no_permission(self):
  112. """view fails due to lack of permissions"""
  113. post = reply_thread(self.thread)
  114. post_link = reverse('misago:delete_post', kwargs={'post_id': post.id})
  115. self.override_acl({'can_hide_posts': 0, 'can_hide_own_posts': 0})
  116. response = self.client.post(post_link)
  117. self.assertEqual(response.status_code, 403)
  118. def test_delete_post(self):
  119. """view deletes post"""
  120. post = reply_thread(self.thread)
  121. post_link = reverse('misago:delete_post', kwargs={'post_id': post.id})
  122. self.override_acl({'can_hide_posts': 2})
  123. response = self.client.post(post_link)
  124. self.assertEqual(response.status_code, 302)
  125. thread = Thread.objects.get(id=self.thread.id)
  126. self.assertEqual(thread.first_post_id, thread.last_post_id)
  127. self.assertEqual(thread.replies, 0)
  128. with self.assertRaises(Post.DoesNotExist):
  129. Post.objects.get(id=post.id)