test_tokens.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from rest_framework import status
  2. from desecapi.models import Token
  3. from desecapi.tests.base import DomainOwnerTestCase
  4. class TokenTestCase(DomainOwnerTestCase):
  5. def setUp(self):
  6. super().setUp()
  7. self.token2 = self.create_token(self.owner, name='testtoken')
  8. self.other_token = self.create_token(self.user)
  9. def test_token_last_used(self):
  10. self.assertIsNone(Token.objects.get(pk=self.token.id).last_used)
  11. self.client.get(self.reverse('v1:root'))
  12. self.assertIsNotNone(Token.objects.get(pk=self.token.id).last_used)
  13. def test_list_tokens(self):
  14. response = self.client.get(self.reverse('v1:token-list'))
  15. self.assertStatus(response, status.HTTP_200_OK)
  16. self.assertEqual(len(response.data), 2)
  17. self.assertIn('id', response.data[0])
  18. self.assertFalse(any(field in response.data[0] for field in ['token', 'key', 'value']))
  19. self.assertNotContains(response, self.token.plain)
  20. def test_delete_my_token(self):
  21. token_id = Token.objects.get(user=self.owner, name='testtoken').id
  22. url = self.reverse('v1:token-detail', pk=token_id)
  23. response = self.client.delete(url)
  24. self.assertStatus(response, status.HTTP_204_NO_CONTENT)
  25. self.assertFalse(Token.objects.filter(pk=token_id).exists())
  26. response = self.client.get(url)
  27. self.assertStatus(response, status.HTTP_404_NOT_FOUND)
  28. def test_retrieve_my_token(self):
  29. token_id = Token.objects.get(user=self.owner, name='testtoken').id
  30. url = self.reverse('v1:token-detail', pk=token_id)
  31. response = self.client.get(url)
  32. self.assertStatus(response, status.HTTP_200_OK)
  33. self.assertTrue(all(field in response.data for field in ['created', 'id', 'last_used', 'name']))
  34. self.assertFalse(any(field in response.data for field in ['token', 'key', 'value']))
  35. def test_retrieve_other_token(self):
  36. token_id = Token.objects.get(user=self.user).id
  37. url = self.reverse('v1:token-detail', pk=token_id)
  38. response = self.client.get(url)
  39. self.assertStatus(response, status.HTTP_404_NOT_FOUND)
  40. def test_update_my_token(self):
  41. url = self.reverse('v1:token-detail', pk=self.token.id)
  42. for method in [self.client.patch, self.client.put]:
  43. response = method(url, data={'name': method.__name__})
  44. self.assertStatus(response, status.HTTP_200_OK)
  45. self.assertEqual(response.data['name'], method.__name__)
  46. def test_create_token(self):
  47. n = len(Token.objects.filter(user=self.owner).all())
  48. datas = [{}, {'name': ''}, {'name': 'foobar'}]
  49. for data in datas:
  50. response = self.client.post(self.reverse('v1:token-list'), data=data)
  51. self.assertStatus(response, status.HTTP_201_CREATED)
  52. self.assertTrue(all(field in response.data for field in ['id', 'created', 'token', 'name']))
  53. self.assertEqual(response.data['name'], data.get('name', ''))
  54. self.assertIsNone(response.data['last_used'])
  55. self.assertEqual(len(Token.objects.filter(user=self.owner).all()), n + len(datas))