test_picklable.py 2.1 KB

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