diff options
Diffstat (limited to 'tests/postgres_tests/test_trigram.py')
| -rw-r--r-- | tests/postgres_tests/test_trigram.py | 71 |
1 files changed, 43 insertions, 28 deletions
diff --git a/tests/postgres_tests/test_trigram.py b/tests/postgres_tests/test_trigram.py index 079a32a19b..a0502e0b9b 100644 --- a/tests/postgres_tests/test_trigram.py +++ b/tests/postgres_tests/test_trigram.py @@ -5,65 +5,74 @@ from .models import CharFieldModel, TextFieldModel try: from django.contrib.postgres.search import ( - TrigramDistance, TrigramSimilarity, TrigramWordDistance, + TrigramDistance, + TrigramSimilarity, + TrigramWordDistance, TrigramWordSimilarity, ) except ImportError: pass -@modify_settings(INSTALLED_APPS={'append': 'django.contrib.postgres'}) +@modify_settings(INSTALLED_APPS={"append": "django.contrib.postgres"}) class TrigramTest(PostgreSQLTestCase): Model = CharFieldModel @classmethod def setUpTestData(cls): - cls.Model.objects.bulk_create([ - cls.Model(field='Matthew'), - cls.Model(field='Cat sat on mat.'), - cls.Model(field='Dog sat on rug.'), - ]) + cls.Model.objects.bulk_create( + [ + cls.Model(field="Matthew"), + cls.Model(field="Cat sat on mat."), + cls.Model(field="Dog sat on rug."), + ] + ) def test_trigram_search(self): self.assertQuerysetEqual( - self.Model.objects.filter(field__trigram_similar='Mathew'), - ['Matthew'], + self.Model.objects.filter(field__trigram_similar="Mathew"), + ["Matthew"], transform=lambda instance: instance.field, ) def test_trigram_word_search(self): obj = self.Model.objects.create( - field='Gumby rides on the path of Middlesbrough', + field="Gumby rides on the path of Middlesbrough", ) self.assertSequenceEqual( - self.Model.objects.filter(field__trigram_word_similar='Middlesborough'), + self.Model.objects.filter(field__trigram_word_similar="Middlesborough"), [obj], ) def test_trigram_similarity(self): - search = 'Bat sat on cat.' + search = "Bat sat on cat." # Round result of similarity because PostgreSQL 12+ uses greater # precision. self.assertQuerysetEqual( self.Model.objects.filter( field__trigram_similar=search, - ).annotate(similarity=TrigramSimilarity('field', search)).order_by('-similarity'), - [('Cat sat on mat.', 0.625), ('Dog sat on rug.', 0.333333)], + ) + .annotate(similarity=TrigramSimilarity("field", search)) + .order_by("-similarity"), + [("Cat sat on mat.", 0.625), ("Dog sat on rug.", 0.333333)], transform=lambda instance: (instance.field, round(instance.similarity, 6)), ordered=True, ) def test_trigram_word_similarity(self): - search = 'mat' + search = "mat" self.assertSequenceEqual( self.Model.objects.filter( field__trigram_word_similar=search, - ).annotate( - word_similarity=TrigramWordSimilarity(search, 'field'), - ).values('field', 'word_similarity').order_by('-word_similarity'), + ) + .annotate( + word_similarity=TrigramWordSimilarity(search, "field"), + ) + .values("field", "word_similarity") + .order_by("-word_similarity"), [ - {'field': 'Cat sat on mat.', 'word_similarity': 1.0}, - {'field': 'Matthew', 'word_similarity': 0.75}, + {"field": "Cat sat on mat.", "word_similarity": 1.0}, + {"field": "Matthew", "word_similarity": 0.75}, ], ) @@ -72,9 +81,11 @@ class TrigramTest(PostgreSQLTestCase): # precision. self.assertQuerysetEqual( self.Model.objects.annotate( - distance=TrigramDistance('field', 'Bat sat on cat.'), - ).filter(distance__lte=0.7).order_by('distance'), - [('Cat sat on mat.', 0.375), ('Dog sat on rug.', 0.666667)], + distance=TrigramDistance("field", "Bat sat on cat."), + ) + .filter(distance__lte=0.7) + .order_by("distance"), + [("Cat sat on mat.", 0.375), ("Dog sat on rug.", 0.666667)], transform=lambda instance: (instance.field, round(instance.distance, 6)), ordered=True, ) @@ -82,13 +93,16 @@ class TrigramTest(PostgreSQLTestCase): def test_trigram_word_similarity_alternate(self): self.assertSequenceEqual( self.Model.objects.annotate( - word_distance=TrigramWordDistance('mat', 'field'), - ).filter( + word_distance=TrigramWordDistance("mat", "field"), + ) + .filter( word_distance__lte=0.7, - ).values('field', 'word_distance').order_by('word_distance'), + ) + .values("field", "word_distance") + .order_by("word_distance"), [ - {'field': 'Cat sat on mat.', 'word_distance': 0}, - {'field': 'Matthew', 'word_distance': 0.25}, + {"field": "Cat sat on mat.", "word_distance": 0}, + {"field": "Matthew", "word_distance": 0.25}, ], ) @@ -97,4 +111,5 @@ class TrigramTextFieldTest(TrigramTest): """ TextField has the same behavior as CharField regarding trigram lookups. """ + Model = TextFieldModel |
