test_messageuser_view.py 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. import json
  2. from django.contrib.auth import get_user_model
  3. from django.core.urlresolvers import reverse
  4. from misago.acl.testutils import override_acl
  5. from misago.users.testutils import AuthenticatedUserTestCase
  6. from misago.threads.models import ThreadParticipant
  7. class MessageUserTests(AuthenticatedUserTestCase):
  8. ajax_header = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}
  9. field_name = ('misago.threads.posting.participants.'
  10. 'ThreadParticipantsFormMiddleware-users')
  11. def setUp(self):
  12. super(MessageUserTests, self).setUp()
  13. User = get_user_model()
  14. self.test_user = User.objects.create_user(
  15. "Bob", "bob@boberson.com", "Pass.123")
  16. def override_acl(self, user, acl=None):
  17. base_acl = {
  18. 'can_use_private_threads': True,
  19. 'can_start_private_threads': True
  20. }
  21. if acl:
  22. base_acl.update(acl)
  23. override_acl(user, base_acl)
  24. def test_empty_form_handling(self):
  25. """empty form isn't borking"""
  26. self.override_acl(self.user)
  27. response = self.client.post(
  28. reverse('misago:start_private_thread'),
  29. data={'submit': '1'},
  30. **self.ajax_header)
  31. self.assertEqual(response.status_code, 200)
  32. def test_cant_message_self(self):
  33. """user cant message himself"""
  34. self.override_acl(self.user)
  35. response = self.client.get(self.user.get_absolute_url())
  36. self.assertEqual(response.status_code, 200)
  37. self.assertNotIn('btn-message', response.content)
  38. self.assertNotIn(reverse('misago:start_private_thread'),
  39. response.content)
  40. self.override_acl(self.user)
  41. response = self.client.post(
  42. reverse('misago:start_private_thread'),
  43. data={
  44. 'title': 'Jingo Jango!',
  45. 'post': 'Lorem ipsum dolor met.',
  46. self.field_name: self.user.username,
  47. 'submit': '1',
  48. },
  49. **self.ajax_header)
  50. self.assertEqual(response.status_code, 200)
  51. response_json = json.loads(response.content)
  52. self.assertEqual("You can't addres message to yourself.",
  53. response_json['errors'][0])
  54. def test_cant_message_nobody(self):
  55. """user cant message nobody"""
  56. self.override_acl(self.user)
  57. response = self.client.post(
  58. reverse('misago:start_private_thread'),
  59. data={
  60. 'title': 'Jingo Jango!',
  61. 'post': 'Lorem ipsum dolor met.',
  62. self.field_name: '',
  63. 'submit': '1',
  64. },
  65. **self.ajax_header)
  66. self.assertEqual(response.status_code, 200)
  67. response_json = json.loads(response.content)
  68. self.assertEqual("You have to specify message recipients.",
  69. response_json['errors'][0])
  70. def test_cant_message_other_user(self):
  71. """cant message user that can't use private threads"""
  72. self.override_acl(self.user)
  73. self.override_acl(self.test_user, {'can_use_private_threads': False})
  74. response = self.client.get(self.test_user.get_absolute_url())
  75. self.assertEqual(response.status_code, 200)
  76. self.assertIn('btn-message', response.content)
  77. self.assertIn('participate in private threads.', response.content)
  78. self.assertNotIn(reverse('misago:start_private_thread'),
  79. response.content)
  80. self.override_acl(self.user)
  81. self.override_acl(self.test_user, {'can_use_private_threads': False})
  82. response = self.client.post(
  83. reverse('misago:start_private_thread'),
  84. data={
  85. 'title': 'Jingo Jango!',
  86. 'post': 'Lorem ipsum dolor met.',
  87. self.field_name: self.test_user.username,
  88. 'submit': '1',
  89. },
  90. **self.ajax_header)
  91. self.assertEqual(response.status_code, 200)
  92. response_json = json.loads(response.content)
  93. self.assertEqual("Bob can't participate in private threads.",
  94. response_json['errors'][0])
  95. def test_cant_message_blocking_user(self):
  96. """cant message user that blocks us"""
  97. self.override_acl(self.user, {
  98. 'can_add_everyone_to_private_threads': False
  99. })
  100. self.override_acl(self.test_user)
  101. self.test_user.blocks.add(self.user)
  102. response = self.client.get(self.test_user.get_absolute_url())
  103. self.assertEqual(response.status_code, 200)
  104. self.assertIn('btn-message', response.content)
  105. self.assertIn('Bob is blocking you.', response.content)
  106. self.assertNotIn(reverse('misago:start_private_thread'),
  107. response.content)
  108. self.override_acl(self.user, {
  109. 'can_add_everyone_to_private_threads': False
  110. })
  111. self.override_acl(self.test_user)
  112. response = self.client.post(
  113. reverse('misago:start_private_thread'),
  114. data={
  115. 'title': 'Jingo Jango!',
  116. 'post': 'Lorem ipsum dolor met.',
  117. self.field_name: self.test_user.username,
  118. 'submit': '1',
  119. },
  120. **self.ajax_header)
  121. self.assertEqual(response.status_code, 200)
  122. response_json = json.loads(response.content)
  123. self.assertEqual("Bob is blocking you.",
  124. response_json['errors'][0])
  125. def test_cant_message_nonexistant_users(self):
  126. """cant message users that don't exist"""
  127. self.override_acl(self.user)
  128. response = self.client.post(
  129. reverse('misago:start_private_thread'),
  130. data={
  131. 'title': 'Jingo Jango!',
  132. 'post': 'Lorem ipsum dolor met.',
  133. self.field_name: 'hatsune, miku',
  134. 'submit': '1',
  135. },
  136. **self.ajax_header)
  137. self.assertEqual(response.status_code, 200)
  138. response_json = json.loads(response.content)
  139. self.assertEqual("One or more message recipients could "
  140. "not be found: hatsune, miku",
  141. response_json['errors'][0])
  142. def test_cant_message_too_many_users(self):
  143. """cant message too many users"""
  144. self.override_acl(self.user, {'max_private_thread_participants': 2})
  145. response = self.client.post(
  146. reverse('misago:start_private_thread'),
  147. data={
  148. 'title': 'Jingo Jango!',
  149. 'post': 'Lorem ipsum dolor met.',
  150. self.field_name: 'hatsune, miku, yui',
  151. 'submit': '1',
  152. },
  153. **self.ajax_header)
  154. self.assertEqual(response.status_code, 200)
  155. response_json = json.loads(response.content)
  156. self.assertEqual("You can't start private thread "
  157. "with more than than 2 users.",
  158. response_json['errors'][0])
  159. def test_can_message_other_user(self):
  160. """can message other user"""
  161. self.override_acl(self.user)
  162. self.override_acl(self.test_user)
  163. response = self.client.get(self.test_user.get_absolute_url())
  164. self.assertEqual(response.status_code, 200)
  165. self.assertIn('btn-message', response.content)
  166. self.assertIn(reverse('misago:start_private_thread'), response.content)
  167. self.override_acl(self.user)
  168. self.override_acl(self.test_user)
  169. response = self.client.post(
  170. reverse('misago:start_private_thread'),
  171. data={
  172. 'title': 'Jingo Jango!',
  173. 'post': 'Lorem ipsum dolor met.',
  174. self.field_name: self.test_user.username,
  175. 'submit': '1',
  176. },
  177. **self.ajax_header)
  178. self.assertEqual(response.status_code, 200)
  179. response_json = json.loads(response.content)
  180. post_url = response_json['post_url']
  181. self.override_acl(self.user)
  182. response = self.client.get(post_url)
  183. self.assertEqual(response.status_code, 200)
  184. self.assertIn('Jingo Jango!', response.content)
  185. self.assertIn('Lorem ipsum dolor met.', response.content)
  186. thread = self.user.thread_set.order_by('-id').last()
  187. self.assertEqual(thread.title, 'Jingo Jango!')
  188. self.assertEqual(self.user,
  189. thread.threadparticipant_set.get(is_owner=True).user)
  190. self.assertEqual(self.test_user,
  191. thread.threadparticipant_set.get(is_owner=False).user)