Sfoglia il codice sorgente

fix(api): tests: move set_credentials* to client class

Nils Wisiol 6 anni fa
parent
commit
c09c776551

+ 22 - 27
api/desecapi/tests/base.py

@@ -15,6 +15,26 @@ from desecapi.models import User, Domain, Token, RRset, RR
 
 class DesecAPIClient(APIClient):
 
+    @staticmethod
+    def _http_header_base64_conversion(content):
+        return base64.b64encode(content.encode()).decode()
+
+    def set_credentials(self, authorization):
+        self.credentials(HTTP_AUTHORIZATION=authorization)
+
+    def set_credentials_basic_auth(self, part_1, part_2=None):
+        if not part_1 and not part_2:
+            self.set_credentials('')
+        else:
+            s = part_1 if not part_2 else '%s:%s' % (part_1, part_2)
+            self.set_credentials('Basic ' + self._http_header_base64_conversion(s))
+
+    def set_credentials_token_auth(self, token):
+        if token is None:
+            self.set_credentials('')
+        else:
+            self.set_credentials('Token ' + token)
+
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.reverse = DesecTestCase.reverse
@@ -620,31 +640,6 @@ class LockedDomainOwnerTestCase(DomainOwnerTestCase):
 class DynDomainOwnerTestCase(DomainOwnerTestCase):
     DYN = True
 
-    @staticmethod
-    def _http_header_base64_conversion(content):
-        return base64.b64encode(content.encode()).decode()
-
-    @staticmethod
-    def _set_credentials(client, authorization):
-        client.credentials(HTTP_AUTHORIZATION=authorization)
-
-    @classmethod
-    def _set_credentials_basic_auth(cls, client, user_name, token):
-        if not user_name and not token:
-            cls._set_credentials(client, '')
-        else:
-            cls._set_credentials(client, 'Basic ' + DynDomainOwnerTestCase._http_header_base64_conversion(
-                    user_name + ':' + token
-                )
-            )
-
-    @classmethod
-    def _set_credentials_token_auth(cls, client, token):
-        if token is None:
-            cls._set_credentials(client, '')
-        else:
-            cls._set_credentials(client, 'Token ' + token)
-
     def _assertDynDNS12Update(self, requests, mock_remote_addr='', **kwargs):
         with self.assertPdnsRequests(requests):
             if mock_remote_addr:
@@ -665,5 +660,5 @@ class DynDomainOwnerTestCase(DomainOwnerTestCase):
     def setUp(self):
         super().setUp()
         self.client_token_authorized = self.client_class()
-        self._set_credentials_basic_auth(self.client, self.my_domain.name, self.token.key)
-        self._set_credentials_token_auth(self.client_token_authorized, self.token.key)
+        self.client.set_credentials_basic_auth(self.my_domain.name, self.token.key)
+        self.client_token_authorized.set_credentials_token_auth(self.token.key)

+ 3 - 3
api/desecapi/tests/testauthentication.py

@@ -12,13 +12,13 @@ class DynUpdateAuthenticationTestCase(DynDomainOwnerTestCase):
 
     def assertDynDNS12Status(self, status=HTTP_200_OK, authorization=None):
         if authorization:
-            self._set_credentials(self.client, 'Basic ' + self._http_header_base64_conversion(authorization))
+            self.client.set_credentials_basic_auth(authorization)
         request = self._get_dyndns12()
         self.assertEqual(request.status_code, status, request)
 
     def assertDynDNS12AuthenticationStatus(self, username, token, status):
         # Note that this overwrites self.client's credentials, which may be unexpected
-        self._set_credentials_basic_auth(self.client, username, token)
+        self.client.set_credentials_basic_auth(username, token)
         self.assertDynDNS12Status(status)
 
     def test_username_password(self):
@@ -48,7 +48,7 @@ class TokenAuthenticationTestCase(DynDomainOwnerTestCase):
             return self.client.get(self.reverse('v1:domain-list'))
 
     def assertAuthenticationStatus(self, status=HTTP_200_OK, token=''):
-        self._set_credentials_token_auth(self.client, token)
+        self.client.set_credentials_token_auth(token)
         response = self._get_domains()
         self.assertEqual(response.status_code, status, response)
 

+ 4 - 4
api/desecapi/tests/testdyndns12update.py

@@ -21,13 +21,13 @@ class DynDNS12UpdateTest(DynDomainOwnerTestCase):
         self.assertRRSet(name, '', 'AAAA', ipv6)
 
     def test_identification_by_domain_name(self):
-        self._set_credentials_basic_auth(self.client, self.my_domain.name + '.invalid', self.token.key)
+        self.client.set_credentials_basic_auth(self.my_domain.name + '.invalid', self.token.key)
         response = self.assertDynDNS12NoUpdate(mock_remote_addr='10.5.5.6')
         self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
 
     def test_identification_by_query_params(self):
         # /update?username=foobar.dedyn.io&password=secret
-        self._set_credentials_basic_auth(self.client, None, None)
+        self.client.set_credentials_basic_auth(None, None)
         response = self.assertDynDNS12Update(username=self.my_domain.name, password=self.token.key)
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertEqual(response.data, 'good')
@@ -133,7 +133,7 @@ class SingleDomainDynDNS12UpdateTest(DynDNS12UpdateTest):
     NUM_OWNED_DOMAINS = 1
 
     def test_identification_by_token(self):
-        self._set_credentials_basic_auth(self.client, '', self.token.key)
+        self.client.set_credentials_basic_auth('', self.token.key)
         response = self.assertDynDNS12Update(self.my_domain.name, mock_remote_addr='10.5.5.6')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertEqual(response.data, 'good')
@@ -147,6 +147,6 @@ class MultipleDomainDynDNS12UpdateTest(DynDNS12UpdateTest):
         """
         Test if the conflict of having multiple domains, but not specifying which to update is correctly recognized.
         """
-        self._set_credentials_basic_auth(self.client, '', self.token.key)
+        self.client.set_credentials_basic_auth('', self.token.key)
         response = self.client.get(self.reverse('v1:dyndns12update'), REMOTE_ADDR='10.5.5.7')
         self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)