from django.db import connection from django.db.models import CharField from django.db.models.functions import SHA1 from django.test import TestCase from django.test.utils import register_lookup from ..models import Author class SHA1Tests(TestCase): @classmethod def setUpTestData(cls): Author.objects.bulk_create( [ Author(alias="John Smith"), Author(alias="Jordan Élena"), Author(alias="皇帝"), Author(alias=""), Author(alias=None), ] ) def test_basic(self): authors = ( Author.objects.annotate( sha1_alias=SHA1("alias"), ) .values_list("sha1_alias", flat=True) .order_by("pk") ) self.assertSequenceEqual( authors, [ "e61a3587b3f7a142b8c7b9263c82f8119398ecb7", "0781e0745a2503e6ded05ed5bc554c421d781b0c", "198d15ea139de04060caf95bc3e0ec5883cba881", "da39a3ee5e6b4b0d3255bfef95601890afd80709", "da39a3ee5e6b4b0d3255bfef95601890afd80709" if connection.features.interprets_empty_strings_as_nulls else None, ], ) def test_transform(self): with register_lookup(CharField, SHA1): authors = Author.objects.filter( alias__sha1="e61a3587b3f7a142b8c7b9263c82f8119398ecb7", ).values_list("alias", flat=True) self.assertSequenceEqual(authors, ["John Smith"])