def test_status_code_post_valid_rate(self): for rate in self.valid_rates: with APITestCase.subTest(self, f"rate: {rate}"): response = self.client.post(self.valid_urls['car-models-rate'], data={'rate': rate}) self.assertEqual(response.status_code, status.HTTP_200_OK, response.data or response)
def test_status_code_post_invalid_rate(self): for msg, rate in self.invalid_rates.items(): with APITestCase.subTest(self, f"rate: {msg}"): response = self.client.post(self.valid_urls['car-models-rate'], data={'rate': rate}) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST, response.data or response)
def test_status_code_get_invalid_car(self): for msg, urls in self.invalid_urls.items(): for view, url in urls.items(): with APITestCase.subTest(self, f"{msg} url: {url}"): response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND, response.data or response)
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')
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')
def test_status_code_post_invalid_car(self): for make_msg, make in self.invalid_car_data['make_data'].items(): for model_msg, model in self.invalid_car_data['model_data'].items( ): with APITestCase.subTest( self, f"make: {make_msg}; model: {model_msg}"): response = self.client.post(self.valid_urls['cars-list'], data={ **make, **model }) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST, response.data or response)
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')
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')
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')
def test_status_code_get_valid(self): for view, url in self.valid_urls.items(): with APITestCase.subTest(self, f"url: {url}"): response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK, response.data or response)