Cleaned up ValidationError Refs #459
This commit is contained in:
		
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							| @@ -102,3 +102,4 @@ that much better: | |||||||
|  * mostlystatic |  * mostlystatic | ||||||
|  * Greg Banks |  * Greg Banks | ||||||
|  * swashbuckler |  * swashbuckler | ||||||
|  |  * Adam Reeve | ||||||
| @@ -53,9 +53,9 @@ class ValidationError(AssertionError): | |||||||
|         message = super(ValidationError, self).__getattribute__(name) |         message = super(ValidationError, self).__getattribute__(name) | ||||||
|         if name == 'message': |         if name == 'message': | ||||||
|             if self.field_name: |             if self.field_name: | ||||||
|                 message += ' ("%s")' % self.field_name |                 message = '%s ("%s")' % (message, self.field_name) | ||||||
|             if self.errors: |             if self.errors: | ||||||
|                 message += ':\n' + self._format_errors() |                 message = '%s:\n%s' % (message, self._format_errors()) | ||||||
|         return message |         return message | ||||||
|  |  | ||||||
|     def _get_message(self): |     def _get_message(self): | ||||||
| @@ -94,12 +94,13 @@ class ValidationError(AssertionError): | |||||||
|         """Returns a string listing all errors within a document""" |         """Returns a string listing all errors within a document""" | ||||||
|  |  | ||||||
|         def format_error(field, value, prefix=''): |         def format_error(field, value, prefix=''): | ||||||
|  |             prefix = "%s.%s" % (prefix, field) if prefix else "%s" % field | ||||||
|             if isinstance(value, dict): |             if isinstance(value, dict): | ||||||
|                 new_prefix = (prefix + '.' if prefix else '') + str(field) |  | ||||||
|                 return '\n'.join( |                 return '\n'.join( | ||||||
|                         [format_error(k, value[k], new_prefix) for k in value]) |                         [format_error(k, value[k], prefix) for k in value]) | ||||||
|             else: |             else: | ||||||
|                 return (prefix + ": " if prefix else '') + str(value) |                 return "%s: %s" % (prefix, value) | ||||||
|  |  | ||||||
|         return '\n'.join( |         return '\n'.join( | ||||||
|                 [format_error(k, v) for k, v in self.to_dict().items()]) |                 [format_error(k, v) for k, v in self.to_dict().items()]) | ||||||
|   | |||||||
| @@ -2861,5 +2861,62 @@ class DocumentTest(unittest.TestCase): | |||||||
|                                         } |                                         } | ||||||
|                                     ) ]), "1,2") |                                     ) ]), "1,2") | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ValidatorErrorTest(unittest.TestCase): | ||||||
|  |  | ||||||
|  |     def test_to_dict(self): | ||||||
|  |         """Ensure a ValidationError handles error to_dict correctly. | ||||||
|  |         """ | ||||||
|  |         error = ValidationError('root') | ||||||
|  |         self.assertEquals(error.to_dict(), {}) | ||||||
|  |  | ||||||
|  |         # 1st level error schema | ||||||
|  |         error.errors = {'1st': ValidationError('bad 1st'), } | ||||||
|  |         self.assertTrue('1st' in error.to_dict()) | ||||||
|  |         self.assertEquals(error.to_dict()['1st'], 'bad 1st') | ||||||
|  |  | ||||||
|  |         # 2nd level error schema | ||||||
|  |         error.errors = {'1st': ValidationError('bad 1st', errors={ | ||||||
|  |             '2nd': ValidationError('bad 2nd'), | ||||||
|  |         })} | ||||||
|  |         self.assertTrue('1st' in error.to_dict()) | ||||||
|  |         self.assertTrue(isinstance(error.to_dict()['1st'], dict)) | ||||||
|  |         self.assertTrue('2nd' in error.to_dict()['1st']) | ||||||
|  |         self.assertEquals(error.to_dict()['1st']['2nd'], 'bad 2nd') | ||||||
|  |  | ||||||
|  |         # moar levels | ||||||
|  |         error.errors = {'1st': ValidationError('bad 1st', errors={ | ||||||
|  |             '2nd': ValidationError('bad 2nd', errors={ | ||||||
|  |                 '3rd': ValidationError('bad 3rd', errors={ | ||||||
|  |                     '4th': ValidationError('Inception'), | ||||||
|  |                 }), | ||||||
|  |             }), | ||||||
|  |         })} | ||||||
|  |         self.assertTrue('1st' in error.to_dict()) | ||||||
|  |         self.assertTrue('2nd' in error.to_dict()['1st']) | ||||||
|  |         self.assertTrue('3rd' in error.to_dict()['1st']['2nd']) | ||||||
|  |         self.assertTrue('4th' in error.to_dict()['1st']['2nd']['3rd']) | ||||||
|  |         self.assertEquals(error.to_dict()['1st']['2nd']['3rd']['4th'], | ||||||
|  |                          'Inception') | ||||||
|  |  | ||||||
|  |         self.assertEquals(error.message, "root:\n1st.2nd.3rd.4th: Inception") | ||||||
|  |  | ||||||
|  |     def test_model_validation(self): | ||||||
|  |  | ||||||
|  |         class User(Document): | ||||||
|  |             username = StringField(primary_key=True) | ||||||
|  |             name = StringField(required=True) | ||||||
|  |  | ||||||
|  |         try: | ||||||
|  |             User().validate() | ||||||
|  |         except ValidationError, e: | ||||||
|  |             expected_error_message = """Errors encountered validating document: | ||||||
|  | username: Field is required ("username") | ||||||
|  | name: Field is required ("name")""" | ||||||
|  |             self.assertEquals(e.message, expected_error_message) | ||||||
|  |             self.assertEquals(e.to_dict(), { | ||||||
|  |                 'username': 'Field is required ("username")', | ||||||
|  |                 'name': u'Field is required ("name")'}) | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
| @@ -1902,43 +1902,5 @@ class FieldTest(unittest.TestCase): | |||||||
|         post.validate() |         post.validate() | ||||||
|  |  | ||||||
|  |  | ||||||
| class ValidatorErrorTest(unittest.TestCase): |  | ||||||
|  |  | ||||||
|     def test_to_dict(self): |  | ||||||
|         """Ensure a ValidationError handles error to_dict correctly. |  | ||||||
|         """ |  | ||||||
|         error = ValidationError('root') |  | ||||||
|         self.assertEquals(error.to_dict(), {}) |  | ||||||
|  |  | ||||||
|         # 1st level error schema |  | ||||||
|         error.errors = {'1st': ValidationError('bad 1st'), } |  | ||||||
|         self.assertTrue('1st' in error.to_dict()) |  | ||||||
|         self.assertEquals(error.to_dict()['1st'], 'bad 1st') |  | ||||||
|  |  | ||||||
|         # 2nd level error schema |  | ||||||
|         error.errors = {'1st': ValidationError('bad 1st', errors={ |  | ||||||
|             '2nd': ValidationError('bad 2nd'), |  | ||||||
|         })} |  | ||||||
|         self.assertTrue('1st' in error.to_dict()) |  | ||||||
|         self.assertTrue(isinstance(error.to_dict()['1st'], dict)) |  | ||||||
|         self.assertTrue('2nd' in error.to_dict()['1st']) |  | ||||||
|         self.assertEquals(error.to_dict()['1st']['2nd'], 'bad 2nd') |  | ||||||
|  |  | ||||||
|         # moar levels |  | ||||||
|         error.errors = {'1st': ValidationError('bad 1st', errors={ |  | ||||||
|             '2nd': ValidationError('bad 2nd', errors={ |  | ||||||
|                 '3rd': ValidationError('bad 3rd', errors={ |  | ||||||
|                     '4th': ValidationError('Inception'), |  | ||||||
|                 }), |  | ||||||
|             }), |  | ||||||
|         })} |  | ||||||
|         self.assertTrue('1st' in error.to_dict()) |  | ||||||
|         self.assertTrue('2nd' in error.to_dict()['1st']) |  | ||||||
|         self.assertTrue('3rd' in error.to_dict()['1st']['2nd']) |  | ||||||
|         self.assertTrue('4th' in error.to_dict()['1st']['2nd']['3rd']) |  | ||||||
|         self.assertEquals(error.to_dict()['1st']['2nd']['3rd']['4th'], |  | ||||||
|                           'Inception') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user