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. 
    
  6. from ..models import Author
    
  7. 
    
  8. 
    
  9. class UpperTests(TestCase):
    
  10.     def test_basic(self):
    
  11.         Author.objects.create(name="John Smith", alias="smithj")
    
  12.         Author.objects.create(name="Rhonda")
    
  13.         authors = Author.objects.annotate(upper_name=Upper("name"))
    
  14.         self.assertQuerysetEqual(
    
  15.             authors.order_by("name"),
    
  16.             [
    
  17.                 "JOHN SMITH",
    
  18.                 "RHONDA",
    
  19.             ],
    
  20.             lambda a: a.upper_name,
    
  21.         )
    
  22.         Author.objects.update(name=Upper("name"))
    
  23.         self.assertQuerysetEqual(
    
  24.             authors.order_by("name"),
    
  25.             [
    
  26.                 ("JOHN SMITH", "JOHN SMITH"),
    
  27.                 ("RHONDA", "RHONDA"),
    
  28.             ],
    
  29.             lambda a: (a.upper_name, a.name),
    
  30.         )
    
  31. 
    
  32.     def test_transform(self):
    
  33.         with register_lookup(CharField, Upper):
    
  34.             Author.objects.create(name="John Smith", alias="smithj")
    
  35.             Author.objects.create(name="Rhonda")
    
  36.             authors = Author.objects.filter(name__upper__exact="JOHN SMITH")
    
  37.             self.assertQuerysetEqual(
    
  38.                 authors.order_by("name"),
    
  39.                 [
    
  40.                     "John Smith",
    
  41.                 ],
    
  42.                 lambda a: a.name,
    
  43.             )