test_binaryfield.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.core.exceptions import ValidationError
  2. from django.db import models
  3. from django.test import TestCase
  4. from .models import DataModel
  5. class BinaryFieldTests(TestCase):
  6. binary_data = b'\x00\x46\xFE'
  7. def test_set_and_retrieve(self):
  8. data_set = (self.binary_data, bytearray(self.binary_data), memoryview(self.binary_data))
  9. for bdata in data_set:
  10. with self.subTest(data=repr(bdata)):
  11. dm = DataModel(data=bdata)
  12. dm.save()
  13. dm = DataModel.objects.get(pk=dm.pk)
  14. self.assertEqual(bytes(dm.data), bytes(bdata))
  15. # Resave (=update)
  16. dm.save()
  17. dm = DataModel.objects.get(pk=dm.pk)
  18. self.assertEqual(bytes(dm.data), bytes(bdata))
  19. # Test default value
  20. self.assertEqual(bytes(dm.short_data), b'\x08')
  21. def test_max_length(self):
  22. dm = DataModel(short_data=self.binary_data * 4)
  23. with self.assertRaises(ValidationError):
  24. dm.full_clean()
  25. def test_editable(self):
  26. field = models.BinaryField()
  27. self.assertIs(field.editable, False)
  28. field = models.BinaryField(editable=True)
  29. self.assertIs(field.editable, True)
  30. field = models.BinaryField(editable=False)
  31. self.assertIs(field.editable, False)
  32. def test_filter(self):
  33. dm = DataModel.objects.create(data=self.binary_data)
  34. DataModel.objects.create(data=b'\xef\xbb\xbf')
  35. self.assertSequenceEqual(DataModel.objects.filter(data=self.binary_data), [dm])
  36. def test_filter_bytearray(self):
  37. dm = DataModel.objects.create(data=self.binary_data)
  38. DataModel.objects.create(data=b'\xef\xbb\xbf')
  39. self.assertSequenceEqual(DataModel.objects.filter(data=bytearray(self.binary_data)), [dm])
  40. def test_filter_memoryview(self):
  41. dm = DataModel.objects.create(data=self.binary_data)
  42. DataModel.objects.create(data=b'\xef\xbb\xbf')
  43. self.assertSequenceEqual(DataModel.objects.filter(data=memoryview(self.binary_data)), [dm])