def test_error_message(self): s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertFalse(s.errors) self.data_set['linenos'] = 'A text instead of a bool' s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertTrue(s.errors) self.assertTrue(type(s.errors), dict)
def test_error_message(self): s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertFalse(s.errors) self.data_set["linenos"] = "A text instead of a bool" s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertTrue(s.errors) self.assertTrue(type(s.errors), dict)
def test_error_registration(self): self.data_set["title"] = "A Python" self.data_set["language"] = "c++" s = run_is_valid(AnotherSnippetSerializer, data=self.data_set) self.assertEqual(s.errors["errors"][0]["field"], "language") code = settings.FRIENDLY_FIELD_ERRORS["ChoiceField"]["invalid_choice"] self.assertEqual(s.errors["errors"][0]["code"], code)
def test_register_method_in_field_validation(self): self.data_set['comment'] = 'small comment' s = run_is_valid(ThirdSnippetModelSerializer, data=self.data_set) code = FRIENDLY_FIELD_ERRORS['CharField']['blank'] self.assertIsNotNone(s.errors['errors'].get('comment')) self.assertEqual(type(s.errors['errors']['comment']), list) self.assertEqual(s.errors['errors']['comment'][0]['code'], code)
def test_custom_field_validation_using_validators(self): self.data_set['title'] = 'A title' s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertIsNotNone(s.errors['errors'].get('title')) self.assertEqual(type(s.errors['errors']['title']), list) self.assertEqual( s.errors['errors']['title'][0]['code'], 'incorrect_title')
def test_datetime_field_error_content(self): # invalid self.data_set["posted_date"] = "text instead of date" s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["DateTimeField"]["invalid"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "posted_date")
def test_boolean_field_error_content(self): self.data_set['linenos'] = 'A text instead of a bool' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = FRIENDLY_FIELD_ERRORS['BooleanField']['invalid'] self.assertIsNotNone(s.errors['errors'].get('linenos')) self.assertEqual(type(s.errors['errors']['linenos']), list) self.assertEqual(s.errors['errors']['linenos'][0]['code'], code)
def test_failed_relation_lookup_many_to_many(self): data = {'title': ['another', 'invalid']} s = run_is_valid(SnippetValidator, data=data) code = FRIENDLY_FIELD_ERRORS['SlugRelatedField']['does_not_exist'] self.assertIsNotNone(s.errors['errors'].get('title')) self.assertEqual(type(s.errors['errors']['title']), list) self.assertEqual(s.errors['errors']['title'][0]['code'], code)
def test_error_registration(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(AnotherSnippetModelSerializer, data=self.data_set) self.assertEqual(s.errors['errors'][0]['field'], 'language') code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(s.errors['errors'][0]['code'], code)
def test_error_registration(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(AnotherSnippetSerializer, data=self.data_set) self.assertEqual(s.errors['errors'][0]['field'], 'language') code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(s.errors['errors'][0]['code'], code)
def test_datetime_field_error_content(self): # invalid self.data_set['posted_date'] = 'text instead of date' s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['DateTimeField']['invalid'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'posted_date')
def test_datetime_field_error_content(self): # invalid self.data_set['posted_date'] = 'text instead of date' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['DateTimeField']['invalid'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'posted_date')
def test_custom_field_validation_method(self): self.data_set['comment'] = 'comment' s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertIsNotNone(s.errors['errors'].get('comment')) self.assertEqual(type(s.errors['errors']['comment']), list) self.assertEqual( s.errors['errors']['comment'][0]['code'], 'validate_comment')
def test_datetime_field_error_content(self): # invalid self.data_set['posted_date'] = 'text instead of date' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = FRIENDLY_FIELD_ERRORS['DateTimeField']['invalid'] self.assertIsNotNone(s.errors['errors'].get('posted_date')) self.assertEqual(type(s.errors['errors']['posted_date']), list) self.assertEqual(s.errors['errors']['posted_date'][0]['code'], code)
def test_error_registration(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(AnotherSnippetModelSerializer, data=self.data_set) code = FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertIsNotNone(s.errors['errors'].get('language')) self.assertEqual(type(s.errors['errors']['language']), list) self.assertEqual(s.errors['errors']['language'][0]['code'], code)
def test_error_message_content(self): self.data_set["linenos"] = "A text instead of a bool" s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertEqual(s.errors["message"], settings.VALIDATION_FAILED_MESSAGE) self.assertEqual(s.errors["code"], settings.VALIDATION_FAILED_CODE) self.assertEqual(type(s.errors["errors"]), list) self.assertTrue(s.errors["errors"])
def test_decimal_field_error_content(self): # invalid self.data_set['rating'] = 'text instead of float' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['invalid'] self.assertEqual(s.errors['rating'][0]['code'], code) # decimal places self.data_set['rating'] = 2.99 s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['max_decimal_places'] self.assertEqual(s.errors['rating'][0]['code'], code) # decimal max digits self.data_set['rating'] = 222.9 s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['max_digits'] self.assertEqual(s.errors['rating'][0]['code'], code)
def test_error_message_content(self): self.data_set['linenos'] = 'A text instead of a bool' s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertEqual(s.errors['message'], settings.VALIDATION_FAILED_MESSAGE) self.assertEqual(s.errors['code'], settings.VALIDATION_FAILED_CODE) self.assertEqual(type(s.errors['errors']), list) self.assertTrue(s.errors['errors'])
def test_choice_field_error_content(self): # invalid choice self.data_set['language'] = 'brainfuck' s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(s.errors['language'][0]['code'], code) # empty string self.data_set['language'] = '' s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(s.errors['language'][0]['code'], code) # no data provided self.data_set.pop('language') s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['required'] self.assertEqual(s.errors['language'][0]['code'], code)
def test_error_message_content(self): self.data_set['linenos'] = 'A text instead of a bool' s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertEqual(s.errors['message'], settings.VALIDATION_FAILED_MESSAGE) self.assertEqual(s.errors['code'], settings.VALIDATION_FAILED_CODE) self.assertEqual(type(s.errors['errors']), list) self.assertTrue(s.errors['errors'])
def test_char_field_error_content(self): # Too long string self.data_set['title'] = 'Too Long Title For Defined Serializer' s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['max_length'] self.assertEqual(s.errors['title'][0]['code'], code) # Empty string self.data_set['title'] = '' s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['blank'] self.assertEqual(s.errors['title'][0]['code'], code) # No data provided self.data_set.pop('title') s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['required'] self.assertEqual(s.errors['title'][0]['code'], code)
def test_non_field_error_as_string(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(NonFieldErrorAsStringSerializer, data=self.data_set) errors = s.errors['errors'].get(api_settings.NON_FIELD_ERRORS_KEY) self.assertIsNotNone(errors) self.assertEqual(type(errors), list) self.assertEqual(errors[0]['message'], 'Test') code = FRIENDLY_NON_FIELD_ERRORS['invalid'] self.assertEqual(errors[0]['code'], code)
def test_field_dependency_validation(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = FRIENDLY_NON_FIELD_ERRORS['invalid'] self.assertIsNotNone( s.errors['errors'].get(api_settings.NON_FIELD_ERRORS_KEY)) self.assertEqual( type(s.errors['errors'][api_settings.NON_FIELD_ERRORS_KEY]), list) c = s.errors['errors'][api_settings.NON_FIELD_ERRORS_KEY][0]['code'] self.assertEqual(c, code)
def test_choice_field_error_content(self): # invalid choice self.data_set["language"] = "brainfuck" s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["ChoiceField"]["invalid_choice"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "language") # empty string self.data_set["language"] = "" s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["ChoiceField"]["invalid_choice"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "language") # no data provided self.data_set.pop("language") s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["ChoiceField"]["required"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "language")
def test_char_field_error_content(self): # Too long string self.data_set["title"] = "Too Long Title For Defined Serializer" s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["CharField"]["max_length"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "title") # Empty string self.data_set["title"] = "" s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["CharField"]["blank"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "title") # No data provided self.data_set.pop("title") s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["CharField"]["required"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "title")
def test_decimal_field_error_content(self): # invalid self.data_set['rating'] = 'text instead of float' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['invalid'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'rating') # decimal places self.data_set['rating'] = 2.99 s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['max_decimal_places'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'rating') # decimal max digits self.data_set['rating'] = 222.9 s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['DecimalField']['max_digits'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'rating')
def test_choice_field_error_content(self): # invalid choice self.data_set['language'] = 'brainfuck' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'language') # empty string self.data_set['language'] = '' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'language') # no data provided self.data_set.pop('language') s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['ChoiceField']['required'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'language')
def test_char_field_error_content(self): # Too long string self.data_set['title'] = 'Too Long Title For Defined Serializer' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['max_length'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'title') # Empty string self.data_set['title'] = '' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['blank'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'title') # No data provided self.data_set.pop('title') s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['required'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'title')
def test_decimal_field_error_content(self): # invalid self.data_set["rating"] = "text instead of float" s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["DecimalField"]["invalid"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "rating") # decimal places self.data_set["rating"] = 2.99 s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["DecimalField"]["max_decimal_places"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "rating") # decimal max digits self.data_set["rating"] = 222.9 s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["DecimalField"]["max_digits"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "rating")
def test_unique_failed_from_nested_serializer(self): field_serializer = FieldModelSerializer(data={'label': 'test'}) self.assertTrue(field_serializer.is_valid()) field = field_serializer.save() field_option_serializer = FieldOptionModelSerializer( data={'value': 1}, context={'field': field}) self.assertTrue(field_option_serializer.is_valid()) field_option_serializer.save() data_set = {'label': 'test', 'options': [{'value': 1}]} s = run_is_valid(FieldModelSerializer, data=data_set) code = FRIENDLY_ERROR_CODES['unique'] self.assertIsNotNone(s.errors['errors']) self.assertIsNotNone(s.errors['errors'].get('options')) self.assertEqual(type(s.errors['errors']['options']), list) self.assertEqual(s.errors['errors']['options'][0]['code'], code)
def test_mix_errors_registration(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(RegisterMixErrorSerializer, data=self.data_set) errors = s.errors['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, 'custom_code') self.assertIsNotNone(s.errors['errors'].get('linenos')) self.assertEqual(type(s.errors['errors']['linenos']), list) code = FRIENDLY_FIELD_ERRORS['BooleanField']['invalid'] c = s.errors['errors']['linenos'][0]['code'] self.assertEqual(c, code)
def test_multiple_fields_error_registration(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(RegisterMultipleFieldsErrorSerializer, data=self.data_set) self.assertIsNotNone(s.errors['errors'].get('language')) self.assertEqual(type(s.errors['errors']['language']), list) code = FRIENDLY_FIELD_ERRORS['ChoiceField']['invalid_choice'] c = s.errors['errors']['language'][0]['code'] self.assertEqual(c, code) self.assertIsNotNone(s.errors['errors'].get('linenos')) self.assertEqual(type(s.errors['errors']['linenos']), list) code = FRIENDLY_FIELD_ERRORS['BooleanField']['invalid'] c = s.errors['errors']['linenos'][0]['code'] self.assertEqual(c, code)
def test_non_field_error_as_dict(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(FieldsErrorAsDictInValidateSerializer, data=self.data_set) errors = s.errors['errors'] self.assertIsNotNone(errors.get('title')) self.assertEqual(type(errors['title']), list) self.assertEqual(errors['title'][0]['code'], 'custom_code') self.assertEqual(errors['title'][0]['message'], 'not good') self.assertIsNotNone(errors.get('linenos')) self.assertEqual(type(errors['linenos']), list) self.assertIsNone(errors['linenos'][0]['code']) self.assertEqual(errors['linenos'][0]['message'], 'not good') self.assertIsNotNone(errors.get('language')) self.assertEqual(type(errors['language']), list) self.assertIsNone(errors['language'][0]['code']) self.assertEqual(errors['language'][0]['message'], 'not good')
def test_boolean_field_error_content(self): self.data_set['linenos'] = 'A text instead of a bool' s = run_is_valid(SnippetModelSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['BooleanField']['invalid'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'linenos')
def test_field_dependency_validation(self): self.data_set["title"] = "A Python" self.data_set["language"] = "c++" s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertIsNone(s.errors["errors"][0]["field"]) self.assertEqual(s.errors["errors"][0]["code"], 8000)
def test_register_method_in_field_validation(self): self.data_set['comment'] = 'small comment' s = run_is_valid(ThirdSnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['blank'] self.assertEqual(s.errors['comment'][0]['code'], code)
def test_boolean_field_error_content(self): self.data_set["linenos"] = "A text instead of a bool" s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS["BooleanField"]["invalid"] self.assertEqual(s.errors["errors"][0]["code"], code) self.assertEqual(s.errors["errors"][0]["field"], "linenos")
def test_boolean_field_error_content(self): self.data_set['linenos'] = 'A text instead of a bool' s = run_is_valid(SnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['BooleanField']['invalid'] self.assertEqual(s.errors['errors'][0]['code'], code) self.assertEqual(s.errors['errors'][0]['field'], 'linenos')
def test_saving_invalid_data(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(AnotherSnippetModelSerializer, data=self.data_set) with self.assertRaises(AssertionError): s.save()
def test_custom_field_validation_method(self): self.data_set['comment'] = 'comment' s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertEqual(s.errors['errors'][0]['field'], 'comment') self.assertEqual(s.errors['errors'][0]['code'], 5000)
def test_field_dependency_validation(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertIsNone(s.errors['errors'][0]['field']) self.assertEqual(s.errors['errors'][0]['code'], 8000)
def test_custom_field_validation_using_validators(self): self.data_set['title'] = 'A title' s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertEqual(s.errors['errors'][0]['field'], 'title') self.assertEqual(s.errors['errors'][0]['code'], 5001)
def test_error_message_content(self): self.data_set['linenos'] = 'A text instead of a bool' s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertEqual(type(s.errors['errors']), dict) self.assertTrue(s.errors['errors'])
def test_custom_field_validation_using_validators(self): self.data_set["title"] = "A title" s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertEqual(s.errors["errors"][0]["field"], "title") self.assertEqual(s.errors["errors"][0]["code"], 5001)
def test_field_dependency_validation(self): self.data_set['title'] = 'A Python' self.data_set['language'] = 'c++' s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertIsNone(s.errors['errors'][0]['field']) self.assertEqual(s.errors['errors'][0]['code'], 8000)
def test_custom_field_validation_method(self): self.data_set["comment"] = "comment" s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertEqual(s.errors["errors"][0]["field"], "comment") self.assertEqual(s.errors["errors"][0]["code"], 5000)
def test_custom_field_validation_using_validators(self): self.data_set['title'] = 'A title' s = run_is_valid(SnippetModelSerializer, data=self.data_set) self.assertEqual(s.errors['errors'][0]['field'], 'title') self.assertEqual(s.errors['errors'][0]['code'], 5001)
def test_custom_field_validation_method(self): self.data_set['comment'] = 'comment' s = run_is_valid(SnippetSerializer, data=self.data_set) self.assertEqual(s.errors['errors'][0]['field'], 'comment') self.assertEqual(s.errors['errors'][0]['code'], 5000)
def test_register_method_in_field_validation(self): self.data_set['comment'] = 'small comment' s = run_is_valid(ThirdSnippetSerializer, data=self.data_set) code = settings.FRIENDLY_FIELD_ERRORS['CharField']['blank'] self.assertEqual(s.errors['errors'][0]['field'], 'comment') self.assertEqual(s.errors['errors'][0]['code'], code)