from django.db import connection from django.db.models import CharField from django.db.models.functions import MD5 from django.test import TestCase from django.test.utils import register_lookup from ..models import Author class MD5Tests(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( md5_alias=MD5("alias"), ) .values_list("md5_alias", flat=True) .order_by("pk") ) self.assertSequenceEqual( authors, [ "6117323d2cabbc17d44c2b44587f682c", "ca6d48f6772000141e66591aee49d56c", "bf2c13bc1154e3d2e7df848cbc8be73d", "d41d8cd98f00b204e9800998ecf8427e", "d41d8cd98f00b204e9800998ecf8427e" if connection.features.interprets_empty_strings_as_nulls else None, ], ) def test_transform(self): with register_lookup(CharField, MD5): authors = Author.objects.filter( alias__md5="6117323d2cabbc17d44c2b44587f682c", ).values_list("alias", flat=True) self.assertSequenceEqual(authors, ["John Smith"])