Browse Source

feat(api): add token endpoint tests

Peter Thomassen 5 years ago
parent
commit
06e609ae51
2 changed files with 71 additions and 2 deletions
  1. 2 2
      api/desecapi/tests/base.py
  2. 69 0
      api/desecapi/tests/test_tokens.py

+ 2 - 2
api/desecapi/tests/base.py

@@ -693,8 +693,8 @@ class DesecTestCase(MockPDNSTestCase):
         return any([domain_name.endswith(f'.{suffix}') for suffix in settings.LOCAL_PUBLIC_SUFFIXES])
 
     @classmethod
-    def create_token(cls, user):
-        token = Token.objects.create(user=user)
+    def create_token(cls, user, name=''):
+        token = Token.objects.create(user=user, name=name)
         token.save()
         return token.plain
 

+ 69 - 0
api/desecapi/tests/test_tokens.py

@@ -0,0 +1,69 @@
+from rest_framework import status
+
+from desecapi.models import Token
+from desecapi.tests.base import DomainOwnerTestCase
+
+
+class TokenTestCase(DomainOwnerTestCase):
+
+    def setUp(self):
+        super().setUp()
+        self.token2 = self.create_token(self.owner, name='testtoken')
+        self.other_token = self.create_token(self.user)
+
+    def test_list_tokens(self):
+        response = self.client.get(self.reverse('v1:token-list'))
+        self.assertStatus(response, status.HTTP_200_OK)
+        self.assertEqual(len(response.data), 2)
+        self.assertIn('id', response.data[0])
+        self.assertFalse(any(field in response.data[0] for field in ['token', 'key', 'value']))
+        self.assertNotContains(response, self.token)
+
+    def test_delete_my_token(self):
+        token_id = Token.objects.get(user=self.owner, name='testtoken').id
+        url = self.reverse('v1:token-detail', pk=token_id)
+
+        response = self.client.delete(url)
+        self.assertStatus(response, status.HTTP_204_NO_CONTENT)
+        self.assertFalse(Token.objects.filter(pk=token_id).exists())
+
+        response = self.client.get(url)
+        self.assertStatus(response, status.HTTP_404_NOT_FOUND)
+
+    def test_retrieve_my_token(self):
+        token_id = Token.objects.get(user=self.owner, name='testtoken').id
+        url = self.reverse('v1:token-detail', pk=token_id)
+
+        response = self.client.get(url)
+        self.assertStatus(response, status.HTTP_200_OK)
+        self.assertFalse(any(field in response.data for field in ['token', 'key', 'value']))
+
+    def test_retrieve_other_token(self):
+        token_id = Token.objects.get(user=self.user).id
+        url = self.reverse('v1:token-detail', pk=token_id)
+
+        response = self.client.get(url)
+        self.assertStatus(response, status.HTTP_404_NOT_FOUND)
+
+    def test_update_my_token(self):
+        token_id = Token.objects.get(user=self.user).id
+        url = self.reverse('v1:token-detail', pk=token_id)
+
+        for method in [self.client.patch, self.client.put]:
+            response = method(url, data={'name': 'foobar'})
+            self.assertStatus(response, status.HTTP_405_METHOD_NOT_ALLOWED)
+
+    def test_create_token(self):
+        n = len(Token.objects.filter(user=self.owner).all())
+
+        response = self.client.post(self.reverse('v1:token-list'))
+        self.assertStatus(response, status.HTTP_201_CREATED)
+        self.assertTrue(all(field in response.data for field in ['id', 'created', 'token', 'name']))
+        self.assertEqual(response.data['name'], '')
+
+        response = self.client.post(self.reverse('v1:token-list'), data={'name': 'foobar'})
+        self.assertStatus(response, status.HTTP_201_CREATED)
+        self.assertTrue(all(field in response.data for field in ['id', 'created', 'token', 'name']))
+        self.assertEqual(response.data['name'], 'foobar')
+
+        self.assertEqual(len(Token.objects.filter(user=self.owner).all()), n + 2)