test_upper.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.db.models import CharField
  2. from django.db.models.functions import Upper
  3. from django.test import TestCase
  4. from django.test.utils import register_lookup
  5. from ..models import Author
  6. class UpperTests(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(upper_name=Upper("name"))
  11. self.assertQuerySetEqual(
  12. authors.order_by("name"),
  13. [
  14. "JOHN SMITH",
  15. "RHONDA",
  16. ],
  17. lambda a: a.upper_name,
  18. )
  19. Author.objects.update(name=Upper("name"))
  20. self.assertQuerySetEqual(
  21. authors.order_by("name"),
  22. [
  23. ("JOHN SMITH", "JOHN SMITH"),
  24. ("RHONDA", "RHONDA"),
  25. ],
  26. lambda a: (a.upper_name, a.name),
  27. )
  28. def test_transform(self):
  29. with register_lookup(CharField, Upper):
  30. Author.objects.create(name="John Smith", alias="smithj")
  31. Author.objects.create(name="Rhonda")
  32. authors = Author.objects.filter(name__upper__exact="JOHN SMITH")
  33. self.assertQuerySetEqual(
  34. authors.order_by("name"),
  35. [
  36. "John Smith",
  37. ],
  38. lambda a: a.name,
  39. )