test_thread_poll_api.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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.categories.models import Category
  6. from misago.users.testutils import AuthenticatedUserTestCase
  7. from .. import testutils
  8. from ..models import Poll
  9. class ThreadPollApiTestCase(AuthenticatedUserTestCase):
  10. def setUp(self):
  11. super(ThreadPollApiTestCase, self).setUp()
  12. self.category = Category.objects.get(slug='first-category')
  13. self.thread = testutils.post_thread(self.category, poster=self.user)
  14. self.override_acl()
  15. self.api_link = reverse('misago:api:thread-poll-list', kwargs={
  16. 'thread_pk': self.thread.pk
  17. })
  18. def post(self, url, data=None):
  19. return self.client.post(url, json.dumps(data or {}), content_type='application/json')
  20. def put(self, url, data=None):
  21. return self.client.put(url, json.dumps(data or {}), content_type='application/json')
  22. def override_acl(self, user=None, category=None):
  23. new_acl = self.user.acl
  24. new_acl['categories'][self.category.pk].update({
  25. 'can_see': 1,
  26. 'can_browse': 1,
  27. 'can_close_threads': 0,
  28. })
  29. new_acl.update({
  30. 'can_start_polls': 1,
  31. 'can_edit_polls': 1,
  32. 'can_delete_polls': 1,
  33. 'poll_edit_time': 0,
  34. 'can_always_see_poll_voters': 0
  35. })
  36. if user:
  37. new_acl.update(user)
  38. if category:
  39. new_acl['categories'][self.category.pk].update(category)
  40. override_acl(self.user, new_acl)
  41. def mock_poll(self):
  42. self.poll = self.thread.poll = Poll.objects.create(
  43. category=self.category,
  44. thread=self.thread,
  45. poster=self.user,
  46. poster_name=self.user.username,
  47. poster_slug=self.user.slug,
  48. poster_ip='127.0.0.1',
  49. question="Lorem ipsum dolor met?",
  50. choices=[
  51. {
  52. 'hash': 'aaaaaaaaaaaa',
  53. 'label': 'Alpha',
  54. 'votes': 1
  55. },
  56. {
  57. 'hash': 'bbbbbbbbbbbb',
  58. 'label': 'Beta',
  59. 'votes': 0
  60. },
  61. {
  62. 'hash': 'gggggggggggg',
  63. 'label': 'Gamma',
  64. 'votes': 2
  65. },
  66. {
  67. 'hash': 'dddddddddddd',
  68. 'label': 'Delta',
  69. 'votes': 1
  70. }
  71. ],
  72. allowed_choices=2,
  73. votes=4
  74. )
  75. # one user voted for Alpha choice
  76. User = get_user_model()
  77. user = User.objects.create_user('bob', 'bob@test.com', 'Pass.123')
  78. self.poll.pollvote_set.create(
  79. category=self.category,
  80. thread=self.thread,
  81. voter=user,
  82. voter_name=user.username,
  83. voter_slug=user.slug,
  84. voter_ip='127.0.0.1',
  85. choice_hash='aaaaaaaaaaaa'
  86. )
  87. # test user voted on third and last choices
  88. self.poll.pollvote_set.create(
  89. category=self.category,
  90. thread=self.thread,
  91. voter=self.user,
  92. voter_name=self.user.username,
  93. voter_slug=self.user.slug,
  94. voter_ip='127.0.0.1',
  95. choice_hash='gggggggggggg'
  96. )
  97. self.poll.pollvote_set.create(
  98. category=self.category,
  99. thread=self.thread,
  100. voter=self.user,
  101. voter_name=self.user.username,
  102. voter_slug=self.user.slug,
  103. voter_ip='127.0.0.1',
  104. choice_hash='dddddddddddd'
  105. )
  106. # somebody else voted on third option before being deleted
  107. self.poll.pollvote_set.create(
  108. category=self.category,
  109. thread=self.thread,
  110. voter_name='deleted',
  111. voter_slug='deleted',
  112. voter_ip='127.0.0.1',
  113. choice_hash='gggggggggggg'
  114. )
  115. self.api_link = reverse('misago:api:thread-poll-detail', kwargs={
  116. 'thread_pk': self.thread.pk,
  117. 'pk': self.poll.pk
  118. })