test_thread_pollvotes_api.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from django.contrib.auth import get_user_model
  2. from django.core.urlresolvers import reverse
  3. from ..models import Poll, PollVote
  4. from .test_thread_poll_api import ThreadPollApiTestCase
  5. class ThreadGetVotesTests(ThreadPollApiTestCase):
  6. def setUp(self):
  7. super(ThreadGetVotesTests, self).setUp()
  8. self.mock_poll()
  9. self.api_link = reverse('misago:api:thread-poll-votes', kwargs={
  10. 'thread_pk': self.thread.pk,
  11. 'pk': self.poll.pk
  12. })
  13. def test_anonymous(self):
  14. """api allows guests to get poll votes"""
  15. self.logout_user()
  16. response = self.client.get(self.api_link)
  17. self.assertEqual(response.status_code, 200)
  18. def test_no_permission(self):
  19. """api chcecks permission to see poll voters"""
  20. self.override_acl({
  21. 'can_always_see_poll_voters': False
  22. })
  23. self.poll.is_public = False
  24. self.poll.save()
  25. response = self.client.get(self.api_link)
  26. self.assertEqual(response.status_code, 403)
  27. def test_nonpublic_poll(self):
  28. """api validates that poll is public"""
  29. self.logout_user()
  30. self.poll.is_public = False
  31. self.poll.save()
  32. response = self.client.get(self.api_link)
  33. self.assertEqual(response.status_code, 403)
  34. def test_get_votes(self):
  35. """api returns list of votes"""
  36. response = self.client.get(self.api_link)
  37. self.assertEqual(response.status_code, 200)
  38. response_json = response.json()
  39. self.assertEqual(len(response_json), 4)
  40. self.assertEqual([c['label'] for c in response_json], ['Alpha', 'Beta', 'Gamma', 'Delta'])
  41. self.assertEqual([c['votes'] for c in response_json], [1, 0, 2, 1])
  42. self.assertEqual([len(c['voters']) for c in response_json], [1, 0, 2, 1])
  43. self.assertEqual([[v['username'] for v in c['voters']] for c in response_json], [
  44. ['bob'],
  45. [],
  46. [self.user.username, 'deleted'],
  47. [self.user.username]
  48. ])
  49. User = get_user_model()
  50. user = User.objects.get(slug='bob')
  51. self.assertEqual([[v['url'] for v in c['voters']] for c in response_json], [
  52. [user.get_absolute_url()],
  53. [],
  54. [self.user.get_absolute_url(), None],
  55. [self.user.get_absolute_url()]
  56. ])
  57. class ThreadPostVotesTests(ThreadPollApiTestCase):
  58. def setUp(self):
  59. super(ThreadPostVotesTests, self).setUp()
  60. self.mock_poll()
  61. self.api_link = reverse('misago:api:thread-poll-votes', kwargs={
  62. 'thread_pk': self.thread.pk,
  63. 'pk': self.poll.pk
  64. })
  65. def test_anonymous(self):
  66. """api requires you to sign in to vote in poll"""
  67. self.logout_user()
  68. response = self.post(self.api_link)
  69. self.assertEqual(response.status_code, 403)