瀏覽代碼

fix(api): fixed exception format

Peter Thomassen 5 年之前
父節點
當前提交
bfb9dfb37a
共有 3 個文件被更改,包括 28 次插入1 次删除
  1. 1 1
      api/desecapi/exceptions.py
  2. 14 0
      api/desecapi/tests/base.py
  3. 13 0
      api/desecapi/tests/test_dyndns12update.py

+ 1 - 1
api/desecapi/exceptions.py

@@ -19,7 +19,7 @@ class PDNSValidationError(ValidationError):
         except json.JSONDecodeError:
         except json.JSONDecodeError:
             detail = response.text
             detail = response.text
 
 
-        return super().__init__(detail=detail, code='invalid')
+        return super().__init__(detail={'detail': detail}, code='invalid')
 
 
 
 
 class PDNSException(APIException):
 class PDNSException(APIException):

+ 14 - 0
api/desecapi/tests/base.py

@@ -356,6 +356,20 @@ class MockPDNSTestCase(APITestCase):
         request.pop('status')
         request.pop('status')
         return request
         return request
 
 
+    @classmethod
+    def request_pdns_zone_update_invalid_rr(cls, name=None):
+        def request_callback(r, _, response_headers):
+            return [
+                422, response_headers,
+                json.dumps({'error': 'Mocked error. Considering RR content invalid.'})
+            ]
+
+        request = cls.request_pdns_zone_update(name)
+        # noinspection PyTypeChecker
+        request['body'] = request_callback
+        request.pop('status')
+        return request
+
     def request_pdns_zone_update_assert_body(self, name: str = None, updated_rr_sets: Union[List[RRset], Dict] = None):
     def request_pdns_zone_update_assert_body(self, name: str = None, updated_rr_sets: Union[List[RRset], Dict] = None):
         if updated_rr_sets is None:
         if updated_rr_sets is None:
             updated_rr_sets = []
             updated_rr_sets = []

+ 13 - 0
api/desecapi/tests/test_dyndns12update.py

@@ -122,6 +122,19 @@ class DynDNS12UpdateTest(DynDomainOwnerTestCase):
         self.assertEqual(response.data, 'good')
         self.assertEqual(response.data, 'good')
         self.assertIP(ipv4='10.2.3.4')
         self.assertIP(ipv4='10.2.3.4')
 
 
+    def test_ddclient_dyndns2_v4_invalid(self):
+        # /nic/update?system=dyndns&hostname=foobar.dedyn.io&myip=10.2.3.4asdf
+        params = {
+            'domain_name': self.my_domain.name,
+            'system': 'dyndns',
+            'hostname': self.my_domain.name,
+            'myip': '10.2.3.4asdf',
+        }
+        with self.assertPdnsRequests(self.request_pdns_zone_update_invalid_rr()):
+            response = self.client.get(self.reverse('v1:dyndns12update'), params)
+        self.assertStatus(response, status.HTTP_400_BAD_REQUEST)
+        self.assertIn('Mocked error. Considering RR content invalid.', str(response.data))
+
     def test_ddclient_dyndns2_v6_success(self):
     def test_ddclient_dyndns2_v6_success(self):
         # /nic/update?system=dyndns&hostname=foobar.dedyn.io&myipv6=::1338
         # /nic/update?system=dyndns&hostname=foobar.dedyn.io&myipv6=::1338
         response = self.assertDynDNS12Update(
         response = self.assertDynDNS12Update(