1. import pickle
    
  2. from unittest import TestCase
    
  3. 
    
  4. from django.core.exceptions import ValidationError
    
  5. 
    
  6. 
    
  7. class PickableValidationErrorTestCase(TestCase):
    
  8.     def test_validationerror_is_picklable(self):
    
  9.         original = ValidationError("a", code="something")
    
  10.         unpickled = pickle.loads(pickle.dumps(original))
    
  11.         self.assertIs(unpickled, unpickled.error_list[0])
    
  12.         self.assertEqual(original.message, unpickled.message)
    
  13.         self.assertEqual(original.code, unpickled.code)
    
  14. 
    
  15.         original = ValidationError("a", code="something")
    
  16.         unpickled = pickle.loads(pickle.dumps(ValidationError(original)))
    
  17.         self.assertIs(unpickled, unpickled.error_list[0])
    
  18.         self.assertEqual(original.message, unpickled.message)
    
  19.         self.assertEqual(original.code, unpickled.code)
    
  20. 
    
  21.         original = ValidationError(["a", "b"])
    
  22.         unpickled = pickle.loads(pickle.dumps(original))
    
  23.         self.assertEqual(
    
  24.             original.error_list[0].message, unpickled.error_list[0].message
    
  25.         )
    
  26.         self.assertEqual(
    
  27.             original.error_list[1].message, unpickled.error_list[1].message
    
  28.         )
    
  29. 
    
  30.         original = ValidationError(["a", "b"])
    
  31.         unpickled = pickle.loads(pickle.dumps(ValidationError(original)))
    
  32.         self.assertEqual(
    
  33.             original.error_list[0].message, unpickled.error_list[0].message
    
  34.         )
    
  35.         self.assertEqual(
    
  36.             original.error_list[1].message, unpickled.error_list[1].message
    
  37.         )
    
  38. 
    
  39.         original = ValidationError([ValidationError("a"), ValidationError("b")])
    
  40.         unpickled = pickle.loads(pickle.dumps(original))
    
  41.         self.assertIs(unpickled.args[0][0], unpickled.error_list[0])
    
  42.         self.assertEqual(
    
  43.             original.error_list[0].message, unpickled.error_list[0].message
    
  44.         )
    
  45.         self.assertEqual(
    
  46.             original.error_list[1].message, unpickled.error_list[1].message
    
  47.         )
    
  48. 
    
  49.         message_dict = {"field1": ["a", "b"], "field2": ["c", "d"]}
    
  50.         original = ValidationError(message_dict)
    
  51.         unpickled = pickle.loads(pickle.dumps(original))
    
  52.         self.assertEqual(unpickled.message_dict, message_dict)