Просмотр исходного кода

some missing tests for getting poll voters list

Rafał Pitoń 8 лет назад
Родитель
Сommit
87bffe6b13
1 измененных файлов с 78 добавлено и 1 удалено
  1. 78 1
      misago/threads/tests/test_thread_pollvotes_api.py

+ 78 - 1
misago/threads/tests/test_thread_pollvotes_api.py

@@ -23,6 +23,46 @@ class ThreadGetVotesTests(ThreadPollApiTestCase):
         response = self.client.get(self.api_link)
         self.assertEqual(response.status_code, 200)
 
+    def test_invalid_thread_id(self):
+        """api validates that thread id is integer"""
+        api_link = reverse('misago:api:thread-poll-votes', kwargs={
+            'thread_pk': 'kjha6dsa687sa',
+            'pk': self.poll.pk
+        })
+
+        response = self.client.get(api_link)
+        self.assertEqual(response.status_code, 404)
+
+    def test_nonexistant_thread_id(self):
+        """api validates that thread exists"""
+        api_link = reverse('misago:api:thread-poll-votes', kwargs={
+            'thread_pk': self.thread.pk + 1,
+            'pk': self.poll.pk
+        })
+
+        response = self.client.get(api_link)
+        self.assertEqual(response.status_code, 404)
+
+    def test_invalid_poll_id(self):
+        """api validates that poll id is integer"""
+        api_link = reverse('misago:api:thread-poll-votes', kwargs={
+            'thread_pk': self.thread.pk,
+            'pk': 'sad98as7d97sa98'
+        })
+
+        response = self.client.get(api_link)
+        self.assertEqual(response.status_code, 404)
+
+    def test_nonexistant_poll_id(self):
+        """api validates that poll exists"""
+        api_link = reverse('misago:api:thread-poll-votes', kwargs={
+            'thread_pk': self.thread.pk,
+            'pk': self.poll.pk + 123
+        })
+
+        response = self.client.get(api_link)
+        self.assertEqual(response.status_code, 404)
+
     def test_no_permission(self):
         """api chcecks permission to see poll voters"""
         self.override_acl({
@@ -46,7 +86,44 @@ class ThreadGetVotesTests(ThreadPollApiTestCase):
         self.assertEqual(response.status_code, 403)
 
     def test_get_votes(self):
-        """api returns list of votes"""
+        """api returns list of voters"""
+        response = self.client.get(self.api_link)
+        self.assertEqual(response.status_code, 200)
+
+        response_json = response.json()
+        self.assertEqual(len(response_json), 4)
+
+        self.assertEqual([c['label'] for c in response_json], ['Alpha', 'Beta', 'Gamma', 'Delta'])
+        self.assertEqual([c['votes'] for c in response_json], [1, 0, 2, 1])
+        self.assertEqual([len(c['voters']) for c in response_json], [1, 0, 2, 1])
+
+        self.assertEqual([[v['username'] for v in c['voters']] for c in response_json], [
+            ['bob'],
+            [],
+            [self.user.username, 'deleted'],
+            [self.user.username]
+        ])
+
+        User = get_user_model()
+        user =  User.objects.get(slug='bob')
+
+        self.assertEqual([[v['url'] for v in c['voters']] for c in response_json], [
+            [user.get_absolute_url()],
+            [],
+            [self.user.get_absolute_url(), None],
+            [self.user.get_absolute_url()]
+        ])
+
+    def test_get_votes_private_poll(self):
+        """api returns list of voters on private poll for user with permission"""
+        self.override_acl({
+            'can_always_see_poll_voters': True
+        })
+
+        self.poll.is_public = False
+        self.poll.save()
+
+
         response = self.client.get(self.api_link)
         self.assertEqual(response.status_code, 200)