summaryrefslogtreecommitdiff
path: root/tests/db_functions/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/db_functions/tests.py')
-rw-r--r--tests/db_functions/tests.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/db_functions/tests.py b/tests/db_functions/tests.py
index a401c550fb..00aac82a7b 100644
--- a/tests/db_functions/tests.py
+++ b/tests/db_functions/tests.py
@@ -547,3 +547,97 @@ class FunctionTests(TestCase):
['How to Time Travel'],
lambda a: a.title
)
+
+ def test_length_transform(self):
+ try:
+ CharField.register_lookup(Length, 'length')
+ Author.objects.create(name='John Smith', alias='smithj')
+ Author.objects.create(name='Rhonda')
+ authors = Author.objects.filter(name__length__gt=7)
+ self.assertQuerysetEqual(
+ authors.order_by('name'), [
+ 'John Smith',
+ ],
+ lambda a: a.name
+ )
+ finally:
+ CharField._unregister_lookup(Length, 'length')
+
+ def test_lower_transform(self):
+ try:
+ CharField.register_lookup(Lower, 'lower')
+ Author.objects.create(name='John Smith', alias='smithj')
+ Author.objects.create(name='Rhonda')
+ authors = Author.objects.filter(name__lower__exact='john smith')
+ self.assertQuerysetEqual(
+ authors.order_by('name'), [
+ 'John Smith',
+ ],
+ lambda a: a.name
+ )
+ finally:
+ CharField._unregister_lookup(Lower, 'lower')
+
+ def test_upper_transform(self):
+ try:
+ CharField.register_lookup(Upper, 'upper')
+ Author.objects.create(name='John Smith', alias='smithj')
+ Author.objects.create(name='Rhonda')
+ authors = Author.objects.filter(name__upper__exact='JOHN SMITH')
+ self.assertQuerysetEqual(
+ authors.order_by('name'), [
+ 'John Smith',
+ ],
+ lambda a: a.name
+ )
+ finally:
+ CharField._unregister_lookup(Upper, 'upper')
+
+ def test_func_transform_bilateral(self):
+ class UpperBilateral(Upper):
+ bilateral = True
+
+ try:
+ CharField.register_lookup(UpperBilateral, 'upper')
+ Author.objects.create(name='John Smith', alias='smithj')
+ Author.objects.create(name='Rhonda')
+ authors = Author.objects.filter(name__upper__exact='john smith')
+ self.assertQuerysetEqual(
+ authors.order_by('name'), [
+ 'John Smith',
+ ],
+ lambda a: a.name
+ )
+ finally:
+ CharField._unregister_lookup(UpperBilateral, 'upper')
+
+ def test_func_transform_bilateral_multivalue(self):
+ class UpperBilateral(Upper):
+ bilateral = True
+
+ try:
+ CharField.register_lookup(UpperBilateral, 'upper')
+ Author.objects.create(name='John Smith', alias='smithj')
+ Author.objects.create(name='Rhonda')
+ authors = Author.objects.filter(name__upper__in=['john smith', 'rhonda'])
+ self.assertQuerysetEqual(
+ authors.order_by('name'), [
+ 'John Smith',
+ 'Rhonda',
+ ],
+ lambda a: a.name
+ )
+ finally:
+ CharField._unregister_lookup(UpperBilateral, 'upper')
+
+ def test_function_as_filter(self):
+ Author.objects.create(name='John Smith', alias='SMITHJ')
+ Author.objects.create(name='Rhonda')
+ self.assertQuerysetEqual(
+ Author.objects.filter(alias=Upper(V('smithj'))),
+ ['John Smith'], lambda x: x.name
+ )
+ self.assertQuerysetEqual(
+ Author.objects.exclude(alias=Upper(V('smithj'))),
+ ['Rhonda'], lambda x: x.name
+ )