예제 #1
0
 def test_get_invalid(self, deleted_record=False):
     if self.client and self.detail_view_name:
         response = self.client.get(
             reverse(self.detail_view_name, kwargs=self.get_kwargs(valid=deleted_record)))
         self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND, response.data)
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #2
0
 def test_get_obj_data(self, obj=None, msg=None):
     if self.client and self.detail_view_name and self.serializer:
         response = self.client.get(reverse(self.detail_view_name, kwargs=self.get_kwargs(obj)))
         self.assertJSONEqual(
             json.dumps(response.data), self.serializer(instance=(obj or self.obj), context=self.context).data,
             (f"{msg}: " if msg else "") + f"{response.data}")
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #3
0
 def test_get_list_data(self):
     if self.client and self.list_view_name and self.model and self.list_serializer:
         response = self.client.get(reverse(self.list_view_name))
         self.assertJSONEqual(
             json.dumps(response.data),
             self.list_serializer(instance=self.model.objects.all(), many=True, context=self.context).data,
             response.data)
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #4
0
 def test_del_invalid_data(self):
     if self.client and self.detail_view_name:
         response = self.client.delete(
             reverse(self.detail_view_name, kwargs=self.get_kwargs(valid=False)))
         self.assertEqual(
             response.status_code,
             status.HTTP_405_METHOD_NOT_ALLOWED if self.delete_forbidden else status.HTTP_404_NOT_FOUND,
             response.data)
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #5
0
 def test_patch_invalid_data_payload_raw(self, base_obj=None, payload_data=None):
     if self.client and self.detail_view_name:
         for msg, data in (payload_data or self.invalid_partial_data).items():
             with APITestCase.subTest(self, msg):
                 response = self.client.patch(
                     reverse(self.detail_view_name, kwargs=self.get_kwargs(base_obj)), data=data)
                 self.assertEqual(
                     response.status_code, status.HTTP_400_BAD_REQUEST, f"{response.data}")
                 # check if self.obj was not changed
                 self.test_get_obj_data(obj=base_obj, msg=msg)
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #6
0
 def test_post_invalid_data_payload_raw(self, payload_data=None):
     if self.client and self.list_view_name:
         records = [_.pk for _ in self.model.objects.all()]
         for msg, data in (payload_data or self.invalid_post_data_payload).items():
             with APITestCase.subTest(self, msg):
                 response = self.client.post(reverse(self.list_view_name), data=data)
                 self.assertEqual(
                     response.status_code, status.HTTP_400_BAD_REQUEST, f"{response.data}")
                 # double check records' pks
                 self.assertEqual(records, [_.pk for _ in self.model.objects.all()])
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #7
0
 def test_put_invalid_data_payload_json(self, base_obj=None, payload_data=None):
     if self.client and self.detail_view_name:
         for msg, data in (payload_data or self.invalid_put_data_payload).items():
             with APITestCase.subTest(self, msg):
                 response = self.client.put(
                     reverse(self.detail_view_name, kwargs=self.get_kwargs(base_obj)),
                     data=json.dumps(data),
                     content_type='application/json')
                 self.assertEqual(
                     response.status_code, status.HTTP_400_BAD_REQUEST, f"{response.data}")
                 # check if self.obj was not changed
                 self.test_get_obj_data(obj=base_obj, msg=msg)
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #8
0
 def test_del_data(self, obj=None):
     if self.client and self.detail_view_name:
         response = self.client.delete(
             reverse(self.detail_view_name, kwargs=self.get_kwargs(obj)))
         self.assertEqual(
             response.status_code,
             status.HTTP_405_METHOD_NOT_ALLOWED if self.delete_forbidden else status.HTTP_204_NO_CONTENT,
             response.data)
         # check if record has/hasn't been deleted
         if self.delete_forbidden:
             self.test_get_obj_code(obj)
         else:
             self.test_get_invalid(deleted_record=True)
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #9
0
 def test_post_data_payload_raw(self, payload_data=None):
     if self.client and self.list_view_name:
         for msg, data in (payload_data or self.valid_post_data_payload).items():
             with APITestCase.subTest(self, msg):
                 response = self.client.post(reverse(self.list_view_name), data=data)
                 self.assertEqual(response.status_code, status.HTTP_201_CREATED, f"{response.data}")
                 # try to get created model instance
                 obj = self.get_obj(data)
                 self.assertIsNotNone(obj)
                 # check response code with get method
                 self.test_get_obj_code(obj=obj, msg=msg)
                 # check data integrity of data sent and serialized instance
                 self.assertJSONEqual(
                     json.dumps(response.data), self.serializer(instance=obj, context=self.context).data)
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #10
0
 def test_patch_data_payload_raw(self, base_obj=None, payload_data=None):
     if self.client and self.detail_view_name:
         obj = base_obj
         for msg, data in (payload_data or self.valid_partial_data).items():
             with APITestCase.subTest(self, msg):
                 response = self.client.patch(
                     reverse(self.detail_view_name, kwargs=self.get_kwargs(obj)), data=data)
                 self.assertEqual(response.status_code, status.HTTP_200_OK, f"{response.data}")
                 # try to get updated model instance
                 obj = self.get_obj_by_pk(self.obj.pk)
                 self.assertIsNotNone(obj)
                 # check response code with get method
                 self.test_get_obj_code(obj=obj, msg=msg)
                 # check data integrity of data sent and serialized instance
                 if self.serializer:
                     self.assertJSONEqual(
                         json.dumps(response.data), self.serializer(instance=obj, context=self.context).data)
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #11
0
 def test_get_obj_code(self, obj=None, msg=None):
     if self.client and self.detail_view_name:
         response = self.client.get(reverse(self.detail_view_name, kwargs=self.get_kwargs(obj)))
         self.assertEqual(response.status_code, status.HTTP_200_OK, (f"{msg}: " if msg else "") + f"{response.data}")
     else:
         APITestCase.skipTest(self, 'Lack of data')
예제 #12
0
 def test_get_list_code(self):
     if self.client and self.list_view_name:
         response = self.client.get(reverse(self.list_view_name))
         self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)
     else:
         APITestCase.skipTest(self, 'Lack of data')