django/tests/model_fields/test_binaryfield.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

61 lines
2.1 KiB
Python
Raw Normal View History

from django.core.exceptions import ValidationError
from django.db import models
from django.test import TestCase
from .models import DataModel
class BinaryFieldTests(TestCase):
binary_data = b"\x00\x46\xFE"
def test_set_and_retrieve(self):
data_set = (
self.binary_data,
bytearray(self.binary_data),
memoryview(self.binary_data),
)
for bdata in data_set:
with self.subTest(data=repr(bdata)):
dm = DataModel(data=bdata)
dm.save()
dm = DataModel.objects.get(pk=dm.pk)
self.assertEqual(bytes(dm.data), bytes(bdata))
# Resave (=update)
dm.save()
dm = DataModel.objects.get(pk=dm.pk)
self.assertEqual(bytes(dm.data), bytes(bdata))
# Test default value
self.assertEqual(bytes(dm.short_data), b"\x08")
def test_max_length(self):
dm = DataModel(short_data=self.binary_data * 4)
with self.assertRaises(ValidationError):
dm.full_clean()
def test_editable(self):
field = models.BinaryField()
self.assertIs(field.editable, False)
field = models.BinaryField(editable=True)
self.assertIs(field.editable, True)
field = models.BinaryField(editable=False)
self.assertIs(field.editable, False)
def test_filter(self):
dm = DataModel.objects.create(data=self.binary_data)
DataModel.objects.create(data=b"\xef\xbb\xbf")
self.assertSequenceEqual(DataModel.objects.filter(data=self.binary_data), [dm])
def test_filter_bytearray(self):
dm = DataModel.objects.create(data=self.binary_data)
DataModel.objects.create(data=b"\xef\xbb\xbf")
self.assertSequenceEqual(
DataModel.objects.filter(data=bytearray(self.binary_data)), [dm]
)
def test_filter_memoryview(self):
dm = DataModel.objects.create(data=self.binary_data)
DataModel.objects.create(data=b"\xef\xbb\xbf")
self.assertSequenceEqual(
DataModel.objects.filter(data=memoryview(self.binary_data)), [dm]
)