test_lower.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django.db.models import CharField
  2. from django.db.models.functions import Lower
  3. from django.test import TestCase
  4. from django.test.utils import register_lookup
  5. from ..models import Author
  6. class LowerTests(TestCase):
  7. def test_basic(self):
  8. Author.objects.create(name='John Smith', alias='smithj')
  9. Author.objects.create(name='Rhonda')
  10. authors = Author.objects.annotate(lower_name=Lower('name'))
  11. self.assertQuerysetEqual(
  12. authors.order_by('name'), ['john smith', 'rhonda'],
  13. lambda a: a.lower_name
  14. )
  15. Author.objects.update(name=Lower('name'))
  16. self.assertQuerysetEqual(
  17. authors.order_by('name'), [
  18. ('john smith', 'john smith'),
  19. ('rhonda', 'rhonda'),
  20. ],
  21. lambda a: (a.lower_name, a.name)
  22. )
  23. def test_num_args(self):
  24. with self.assertRaisesMessage(TypeError, "'Lower' takes exactly 1 argument (2 given)"):
  25. Author.objects.update(name=Lower('name', 'name'))
  26. def test_transform(self):
  27. with register_lookup(CharField, Lower):
  28. Author.objects.create(name='John Smith', alias='smithj')
  29. Author.objects.create(name='Rhonda')
  30. authors = Author.objects.filter(name__lower__exact='john smith')
  31. self.assertQuerysetEqual(
  32. authors.order_by('name'), ['John Smith'],
  33. lambda a: a.name
  34. )