Refs #29915 -- Added tests for using pattern lookups with values without hyphens for UUIDField.
This commit is contained in:
parent
28e769dfe6
commit
485f65b3c0
|
@ -2,7 +2,9 @@ import json
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from django.core import exceptions, serializers
|
from django.core import exceptions, serializers
|
||||||
from django.db import IntegrityError, models
|
from django.db import IntegrityError, connection, models
|
||||||
|
from django.db.models import CharField, F, Value
|
||||||
|
from django.db.models.functions import Concat
|
||||||
from django.test import (
|
from django.test import (
|
||||||
SimpleTestCase, TestCase, TransactionTestCase, skipUnlessDBFeature,
|
SimpleTestCase, TestCase, TransactionTestCase, skipUnlessDBFeature,
|
||||||
)
|
)
|
||||||
|
@ -90,11 +92,35 @@ class TestQuerying(TestCase):
|
||||||
NullableUUIDModel.objects.create(field=None),
|
NullableUUIDModel.objects.create(field=None),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def assertSequenceEqualWithoutHyphens(self, qs, result):
|
||||||
|
"""
|
||||||
|
Backends with a native datatype for UUID don't support fragment lookups
|
||||||
|
without hyphens because they store values with them.
|
||||||
|
"""
|
||||||
|
self.assertSequenceEqual(
|
||||||
|
qs,
|
||||||
|
[] if connection.features.has_native_uuid_field else result,
|
||||||
|
)
|
||||||
|
|
||||||
def test_exact(self):
|
def test_exact(self):
|
||||||
self.assertSequenceEqual(
|
self.assertSequenceEqual(
|
||||||
NullableUUIDModel.objects.filter(field__exact='550e8400e29b41d4a716446655440000'),
|
NullableUUIDModel.objects.filter(field__exact='550e8400e29b41d4a716446655440000'),
|
||||||
[self.objs[1]]
|
[self.objs[1]]
|
||||||
)
|
)
|
||||||
|
self.assertSequenceEqual(
|
||||||
|
NullableUUIDModel.objects.filter(
|
||||||
|
field__exact='550e8400-e29b-41d4-a716-446655440000'
|
||||||
|
),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_iexact(self):
|
||||||
|
self.assertSequenceEqualWithoutHyphens(
|
||||||
|
NullableUUIDModel.objects.filter(
|
||||||
|
field__iexact='550E8400E29B41D4A716446655440000'
|
||||||
|
),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
def test_isnull(self):
|
def test_isnull(self):
|
||||||
self.assertSequenceEqual(
|
self.assertSequenceEqual(
|
||||||
|
@ -102,6 +128,50 @@ class TestQuerying(TestCase):
|
||||||
[self.objs[2]]
|
[self.objs[2]]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_contains(self):
|
||||||
|
self.assertSequenceEqualWithoutHyphens(
|
||||||
|
NullableUUIDModel.objects.filter(field__contains='8400e29b'),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_icontains(self):
|
||||||
|
self.assertSequenceEqualWithoutHyphens(
|
||||||
|
NullableUUIDModel.objects.filter(field__icontains='8400E29B'),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_startswith(self):
|
||||||
|
self.assertSequenceEqualWithoutHyphens(
|
||||||
|
NullableUUIDModel.objects.filter(field__startswith='550e8400e29b4'),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_istartswith(self):
|
||||||
|
self.assertSequenceEqualWithoutHyphens(
|
||||||
|
NullableUUIDModel.objects.filter(field__istartswith='550E8400E29B4'),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_endswith(self):
|
||||||
|
self.assertSequenceEqualWithoutHyphens(
|
||||||
|
NullableUUIDModel.objects.filter(field__endswith='a716446655440000'),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_iendswith(self):
|
||||||
|
self.assertSequenceEqualWithoutHyphens(
|
||||||
|
NullableUUIDModel.objects.filter(field__iendswith='A716446655440000'),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_filter_with_expr(self):
|
||||||
|
self.assertSequenceEqualWithoutHyphens(
|
||||||
|
NullableUUIDModel.objects.annotate(
|
||||||
|
value=Concat(Value('8400'), Value('e29b'), output_field=CharField()),
|
||||||
|
).filter(field__contains=F('value')),
|
||||||
|
[self.objs[1]],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestSerialization(SimpleTestCase):
|
class TestSerialization(SimpleTestCase):
|
||||||
test_data = (
|
test_data = (
|
||||||
|
|
Loading…
Reference in New Issue