django/tests/db_functions/text/test_chr.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

40 lines
1.5 KiB
Python
Raw Normal View History

from django.db.models import IntegerField
from django.db.models.functions import Chr, Left, Ord
from django.test import TestCase
from django.test.utils import register_lookup
2018-08-16 07:45:11 +08:00
from ..models import Author
class ChrTests(TestCase):
@classmethod
def setUpTestData(cls):
cls.john = Author.objects.create(name="John Smith", alias="smithj")
cls.elena = Author.objects.create(name="Élena Jordan", alias="elena")
cls.rhonda = Author.objects.create(name="Rhonda")
def test_basic(self):
authors = Author.objects.annotate(first_initial=Left("name", 1))
self.assertCountEqual(authors.filter(first_initial=Chr(ord("J"))), [self.john])
self.assertCountEqual(
authors.exclude(first_initial=Chr(ord("J"))), [self.elena, self.rhonda]
)
def test_non_ascii(self):
authors = Author.objects.annotate(first_initial=Left("name", 1))
self.assertCountEqual(authors.filter(first_initial=Chr(ord("É"))), [self.elena])
self.assertCountEqual(
authors.exclude(first_initial=Chr(ord("É"))), [self.john, self.rhonda]
)
def test_transform(self):
with register_lookup(IntegerField, Chr):
authors = Author.objects.annotate(name_code_point=Ord("name"))
self.assertCountEqual(
authors.filter(name_code_point__chr=Chr(ord("J"))), [self.john]
)
self.assertCountEqual(
authors.exclude(name_code_point__chr=Chr(ord("J"))),
[self.elena, self.rhonda],
)