diff options
Diffstat (limited to 'tests/model_fields')
| -rw-r--r-- | tests/model_fields/models.py | 13 | ||||
| -rw-r--r-- | tests/model_fields/test_uuid.py | 89 |
2 files changed, 102 insertions, 0 deletions
diff --git a/tests/model_fields/models.py b/tests/model_fields/models.py index 430722cf4b..ed1cfa8e8d 100644 --- a/tests/model_fields/models.py +++ b/tests/model_fields/models.py @@ -1,5 +1,6 @@ import os import tempfile +import uuid import warnings try: @@ -294,3 +295,15 @@ if Image: width_field='headshot_width') ############################################################################### + + +class UUIDModel(models.Model): + field = models.UUIDField() + + +class NullableUUIDModel(models.Model): + field = models.UUIDField(blank=True, null=True) + + +class PrimaryKeyUUIDModel(models.Model): + id = models.UUIDField(primary_key=True, default=uuid.uuid4) diff --git a/tests/model_fields/test_uuid.py b/tests/model_fields/test_uuid.py new file mode 100644 index 0000000000..b5bc37a48d --- /dev/null +++ b/tests/model_fields/test_uuid.py @@ -0,0 +1,89 @@ +import json +import uuid + +from django.core import exceptions, serializers +from django.db import models +from django.test import TestCase + +from .models import UUIDModel, NullableUUIDModel, PrimaryKeyUUIDModel + + +class TestSaveLoad(TestCase): + def test_uuid_instance(self): + instance = UUIDModel.objects.create(field=uuid.uuid4()) + loaded = UUIDModel.objects.get() + self.assertEqual(loaded.field, instance.field) + + def test_str_instance_no_hyphens(self): + UUIDModel.objects.create(field='550e8400e29b41d4a716446655440000') + loaded = UUIDModel.objects.get() + self.assertEqual(loaded.field, uuid.UUID('550e8400e29b41d4a716446655440000')) + + def test_str_instance_hyphens(self): + UUIDModel.objects.create(field='550e8400-e29b-41d4-a716-446655440000') + loaded = UUIDModel.objects.get() + self.assertEqual(loaded.field, uuid.UUID('550e8400e29b41d4a716446655440000')) + + def test_str_instance_bad_hyphens(self): + UUIDModel.objects.create(field='550e84-00-e29b-41d4-a716-4-466-55440000') + loaded = UUIDModel.objects.get() + self.assertEqual(loaded.field, uuid.UUID('550e8400e29b41d4a716446655440000')) + + def test_null_handling(self): + NullableUUIDModel.objects.create(field=None) + loaded = NullableUUIDModel.objects.get() + self.assertEqual(loaded.field, None) + + +class TestQuerying(TestCase): + def setUp(self): + self.objs = [ + NullableUUIDModel.objects.create(field=uuid.uuid4()), + NullableUUIDModel.objects.create(field='550e8400e29b41d4a716446655440000'), + NullableUUIDModel.objects.create(field=None), + ] + + def test_exact(self): + self.assertSequenceEqual( + NullableUUIDModel.objects.filter(field__exact='550e8400e29b41d4a716446655440000'), + [self.objs[1]] + ) + + def test_isnull(self): + self.assertSequenceEqual( + NullableUUIDModel.objects.filter(field__isnull=True), + [self.objs[2]] + ) + + +class TestSerialization(TestCase): + test_data = '[{"fields": {"field": "550e8400-e29b-41d4-a716-446655440000"}, "model": "model_fields.uuidmodel", "pk": null}]' + + def test_dumping(self): + instance = UUIDModel(field=uuid.UUID('550e8400e29b41d4a716446655440000')) + data = serializers.serialize('json', [instance]) + self.assertEqual(json.loads(data), json.loads(self.test_data)) + + def test_loading(self): + instance = list(serializers.deserialize('json', self.test_data))[0].object + self.assertEqual(instance.field, uuid.UUID('550e8400-e29b-41d4-a716-446655440000')) + + +class TestValidation(TestCase): + def test_invalid_uuid(self): + field = models.UUIDField() + with self.assertRaises(exceptions.ValidationError) as cm: + field.clean('550e8400', None) + self.assertEqual(cm.exception.code, 'invalid') + self.assertEqual(cm.exception.message % cm.exception.params, "'550e8400' is not a valid UUID.") + + def test_uuid_instance_ok(self): + field = models.UUIDField() + field.clean(uuid.uuid4(), None) # no error + + +class TestAsPrimaryKey(TestCase): + def test_creation(self): + PrimaryKeyUUIDModel.objects.create() + loaded = PrimaryKeyUUIDModel.objects.get() + self.assertIsInstance(loaded.pk, uuid.UUID) |
