def test_invalid_char_field(self): # Too long string self.data_set['title'] = 'Too Long Title For Defined Serializer' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['max_length'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'title') # Empty string self.data_set['title'] = '' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['blank'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'title') # No data provided self.data_set.pop('title') request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['required'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'title')
def test_invalid_choice_field(self): # invalid choice self.data_set['language'] = 'brainfuck' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'language') # empty string self.data_set['language'] = '' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'language') # no data provided self.data_set.pop('language') request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['required'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'language')
def test_invalid_decimal_field(self): # invalid self.data_set['rating'] = 'text instead of float' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['invalid'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'rating') # decimal places self.data_set['rating'] = 2.99 request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['max_decimal_places'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'rating') # decimal max digits self.data_set['rating'] = 222.9 request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['max_digits'] self.assertEqual(int(response.data['errors'][0]['code']), code) self.assertEqual(response.data['errors'][0]['field'], 'rating')
def test_invalid_choice_field(self): # invalid choice self.data_set['language'] = 'brainfuck' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'language') # empty string self.data_set['language'] = '' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'language') # no data provided self.data_set.pop('language') request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['required'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'language')
def test_invalid_char_field(self): # Too long string self.data_set['title'] = 'Too Long Title For Defined Serializer' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['max_length'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'title') # Empty string self.data_set['title'] = '' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['blank'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'title') # No data provided self.data_set.pop('title') request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['required'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'title')
def test_invalid_decimal_field(self): # invalid self.data_set['rating'] = 'text instead of float' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['invalid'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'rating') # decimal places self.data_set['rating'] = 2.99 request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['max_decimal_places'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'rating') # decimal max digits self.data_set['rating'] = 222.9 request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['max_digits'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'rating')
def test_unique_constraint(self): request = self.factory.post(reverse('snippet-list'), data=self.data_set) SnippetList.as_view()(request) request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_VALIDATOR_ERRORS['UniqueValidator'] self.assertEqual(int(response.data['watermark'][0]['code']), code)
def test_unique_constraint(self): request = self.factory.post(reverse('snippet-list'), data=self.data_set) SnippetList.as_view()(request) request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_VALIDATOR_ERRORS['UniqueValidator'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'watermark')
def test_unique_constraint(self): request = self.factory.post(reverse('snippet-list'), data=self.data_set) SnippetList.as_view()(request) request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_VALIDATOR_ERRORS['UniqueValidator'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('watermark')) self.assertEqual(type(errors['watermark']), list) self.assertEqual(errors['watermark'][0]['code'], code)
def test_custom_field_validation_using_validators(self): self.data_set['title'] = 'A title' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) self.assertEqual(response.data['errors'][0]['field'], 'title') self.assertEqual(response.data['errors'][0]['code'], 5001)
def test_invalid_boolean(self): self.data_set['linenos'] = 'A text instead of a bool' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['BooleanField']['invalid'] self.assertEqual(int(response.data['linenos'][0]['code']), code)
def test_field_dependency_validation(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) self.assertEqual(int(response.data['non_field_errors'][0]['code']), 8000)
def test_custom_field_validation_using_validators(self): self.data_set['title'] = 'A title' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) self.assertEqual(response.data['errors'][0]['field'], 'title') self.assertEqual(int(response.data['errors'][0]['code']), 5001)
def test_couple_errors(self): self.data_set['comment'] = 'comment' self.data_set['rating'] = 'Not a number at all' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) self.assertEqual(len(response.data['errors']), 2)
def test_custom_field_validation_method(self): self.data_set['comment'] = 'comment' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) self.assertEqual(response.data['errors'][0]['field'], 'comment') self.assertEqual(response.data['errors'][0]['code'], 5000)
def test_field_dependency_validation(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) self.assertIsNone(response.data['errors'][0]['field']) self.assertEqual(response.data['errors'][0]['code'], 8000)
def test_invalid_boolean(self): self.data_set['linenos'] = 'A text instead of a bool' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['BooleanField']['invalid'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'linenos')
def test_datetime_field_error_content(self): # invalid self.data_set['posted_date'] = 'text instead of date' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['DateTimeField']['invalid'] self.assertEqual(int(response.data['posted_date'][0]['code']), code)
def test_datetime_field_error_content(self): # invalid self.data_set['posted_date'] = 'text instead of date' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 400) code = settings.FRIENDLY_FIELD_ERRORS['DateTimeField']['invalid'] self.assertEqual(response.data['errors'][0]['code'], code) self.assertEqual(response.data['errors'][0]['field'], 'posted_date')
def test_couple_errors(self): self.data_set['comment'] = 'comment' self.data_set['rating'] = 'Not a number at all' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertEqual(len(errors), 2)
def test_custom_field_validation_using_validators(self): self.data_set['title'] = 'A title' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('title')) self.assertEqual(type(errors['title']), list) self.assertEqual(errors['title'][0]['code'], 'incorrect_title')
def test_invalid_boolean(self): self.data_set['linenos'] = 'A text instead of a bool' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['BooleanField']['invalid'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('linenos')) self.assertEqual(type(errors['linenos']), list) self.assertEqual(errors['linenos'][0]['code'], code)
def test_invalid_choice_field(self): # invalid choice self.data_set['language'] = 'brainfuck' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('language')) self.assertEqual(type(errors['language']), list) self.assertEqual(errors['language'][0]['code'], code) # empty string self.data_set['language'] = '' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('language')) self.assertEqual(type(errors['language']), list) self.assertEqual(errors['language'][0]['code'], code) # no data provided self.data_set.pop('language') request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['ChoiceField']['required'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('language')) self.assertEqual(type(errors['language']), list) self.assertEqual(errors['language'][0]['code'], code)
def test_invalid_char_field(self): # Too long string self.data_set['title'] = 'Too Long Title For Defined Serializer' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['CharField']['max_length'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('title')) self.assertEqual(type(errors['title']), list) self.assertEqual(errors['title'][0]['code'], code) # Empty string self.data_set['title'] = '' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['CharField']['blank'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('title')) self.assertEqual(type(errors['title']), list) self.assertEqual(errors['title'][0]['code'], code) # No data provided self.data_set.pop('title') request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['CharField']['required'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('title')) self.assertEqual(type(errors['title']), list) self.assertEqual(errors['title'][0]['code'], code)
def test_datetime_field_error_content(self): # invalid self.data_set['posted_date'] = 'text instead of date' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['DateTimeField']['invalid'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('posted_date')) self.assertEqual(type(errors['posted_date']), list) self.assertEqual(errors['posted_date'][0]['code'], code)
def test_invalid_decimal_field(self): # invalid self.data_set['rating'] = 'text instead of float' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['DecimalField']['invalid'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('rating')) self.assertEqual(type(errors['rating']), list) self.assertEqual(errors['rating'][0]['code'], code) # decimal places self.data_set['rating'] = 2.99 request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['DecimalField']['max_decimal_places'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('rating')) self.assertEqual(type(errors['rating']), list) self.assertEqual(errors['rating'][0]['code'], code) # decimal max digits self.data_set['rating'] = 222.9 request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_FIELD_ERRORS['DecimalField']['max_digits'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get('rating')) self.assertEqual(type(errors['rating']), list) self.assertEqual(errors['rating'][0]['code'], code)
def test_field_dependency_validation(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) code = FRIENDLY_NON_FIELD_ERRORS['invalid'] errors = response.data.get('errors') self.assertIsNotNone(errors) self.assertIsNotNone(errors.get(api_settings.NON_FIELD_ERRORS_KEY)) self.assertEqual(type(errors[api_settings.NON_FIELD_ERRORS_KEY]), list) c = errors[api_settings.NON_FIELD_ERRORS_KEY][0]['code'] self.assertEqual(c, code)
def test_create_a_valid_snippet(self): request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_empty_list_view(self): request = self.factory.get(reverse('snippet-list')) response = SnippetList.as_view()(request) self.assertEqual(response.data, []) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_handler_do_not_touch_pretty_errors(self): self.data_set['language'] = 'node.js' request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertNotIn('status_code', response.data)
def test_empty_list_view(self): request = self.factory.get(reverse('snippet-list')) response = SnippetList.as_view()(request) self.assertEqual(response.data, []) self.assertEqual(response.status_code, 200)
def test_create_a_valid_snippet(self): request = self.factory.post(reverse('snippet-list'), data=self.data_set) response = SnippetList.as_view()(request) self.assertEqual(response.status_code, 201)