-test_replyprivatethread_view.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 Thread, ThreadParticipant
  7. class ReplyPrivateThreadTests(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(ReplyPrivateThreadTests, self).setUp()
  13. User = get_user_model()
  14. self.test_user = User.objects.create_user(
  15. "Bob", "bob@boberson.com", "Pass.123")
  16. self.override_acl(self.user)
  17. self.override_acl(self.test_user)
  18. self.client.post(
  19. reverse('misago:start_private_thread'),
  20. data={
  21. 'title': 'Private Thread Test',
  22. 'post': 'My name is ummm... Pat, I am new here.',
  23. self.field_name: self.test_user.username,
  24. 'submit': '1',
  25. },
  26. **self.ajax_header)
  27. self.thread = Thread.objects.order_by('-id')[:1][0]
  28. def override_acl(self, user, acl=None):
  29. base_acl = {
  30. 'can_use_private_threads': True,
  31. 'can_start_private_threads': True
  32. }
  33. if acl:
  34. base_acl.update(acl)
  35. override_acl(user, base_acl)
  36. def test_empty_form_handling(self):
  37. """empty form isn't borking"""
  38. self.override_acl(self.user)
  39. response = self.client.post(
  40. self.thread.get_reply_api_url(),
  41. data={'submit': '1'},
  42. **self.ajax_header)
  43. self.assertEqual(response.status_code, 200)
  44. def test_reply_thread(self):
  45. """participant can reply private thread"""
  46. self.override_acl(self.user)
  47. self.override_acl(self.test_user)
  48. self.user.last_post_on = None
  49. self.user.save()
  50. response = self.client.post(
  51. self.thread.get_reply_api_url(),
  52. data={
  53. 'post': 'Lorem ipsum dolor met.',
  54. 'submit': '1',
  55. },
  56. **self.ajax_header)
  57. self.assertEqual(response.status_code, 200)
  58. response_json = json.loads(response.content)
  59. post_url = response_json['post_url']
  60. self.override_acl(self.user)
  61. response = self.client.get(post_url)
  62. self.assertEqual(response.status_code, 200)
  63. self.assertIn('My name is ummm... Pat', response.content)
  64. self.assertIn('Lorem ipsum dolor met.', response.content)
  65. def test_cant_reply_abadoned_thread(self):
  66. """participant can't reply private thread with no other users"""
  67. self.override_acl(self.user)
  68. self.thread.threadparticipant_set.filter(user=self.test_user).delete()
  69. response = self.client.post(
  70. self.thread.get_reply_api_url(),
  71. data={
  72. 'post': 'Lorem ipsum dolor met.',
  73. 'submit': '1',
  74. },
  75. **self.ajax_header)
  76. self.assertEqual(response.status_code, 403)
  77. response_json = json.loads(response.content)
  78. message = "You have to add new participants to thread before you will"
  79. self.assertTrue(response_json['message'].startswith(message))