diff options
author | Matt Brewer <matt.brewer693@gmail.com> | 2022-06-17 08:44:03 +0100 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-06-17 11:14:30 +0200 |
commit | 8d160f154f0240a423e83ffe0690e472f837373c (patch) | |
tree | 20acebc9fd78a3aa4fb58d30e4e1e1194dfb47ae /tests/postgres_tests | |
parent | 3ef37a5245015f69a9b9f884ebc289a35d02c5f6 (diff) | |
download | django-8d160f154f0240a423e83ffe0690e472f837373c.tar.gz |
Fixed #33788 -- Added TrigramStrictWordSimilarity() and TrigramStrictWordDistance() on PostgreSQL.
Diffstat (limited to 'tests/postgres_tests')
-rw-r--r-- | tests/postgres_tests/test_trigram.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/postgres_tests/test_trigram.py b/tests/postgres_tests/test_trigram.py index 6870e80737..2d7549fb4b 100644 --- a/tests/postgres_tests/test_trigram.py +++ b/tests/postgres_tests/test_trigram.py @@ -7,6 +7,8 @@ try: from django.contrib.postgres.search import ( TrigramDistance, TrigramSimilarity, + TrigramStrictWordDistance, + TrigramStrictWordSimilarity, TrigramWordDistance, TrigramWordSimilarity, ) @@ -43,6 +45,25 @@ class TrigramTest(PostgreSQLTestCase): self.Model.objects.filter(field__trigram_word_similar="Middlesborough"), [obj], ) + self.assertSequenceEqual( + self.Model.objects.filter(field__trigram_word_similar="Middle"), + [obj], + ) + + def test_trigram_strict_word_search_matched(self): + obj = self.Model.objects.create( + field="Gumby rides on the path of Middlesbrough", + ) + self.assertSequenceEqual( + self.Model.objects.filter( + field__trigram_strict_word_similar="Middlesborough" + ), + [obj], + ) + self.assertSequenceEqual( + self.Model.objects.filter(field__trigram_strict_word_similar="Middle"), + [], + ) def test_trigram_similarity(self): search = "Bat sat on cat." @@ -75,6 +96,19 @@ class TrigramTest(PostgreSQLTestCase): ], ) + def test_trigram_strict_word_similarity(self): + search = "matt" + self.assertSequenceEqual( + self.Model.objects.filter(field__trigram_word_similar=search) + .annotate(word_similarity=TrigramStrictWordSimilarity(search, "field")) + .values("field", "word_similarity") + .order_by("-word_similarity"), + [ + {"field": "Cat sat on mat.", "word_similarity": 0.5}, + {"field": "Matthew", "word_similarity": 0.44444445}, + ], + ) + def test_trigram_similarity_alternate(self): # Round result of distance because PostgreSQL uses greater precision. self.assertQuerysetEqual( @@ -104,6 +138,20 @@ class TrigramTest(PostgreSQLTestCase): ], ) + def test_trigram_strict_word_distance(self): + self.assertSequenceEqual( + self.Model.objects.annotate( + word_distance=TrigramStrictWordDistance("matt", "field"), + ) + .filter(word_distance__lte=0.7) + .values("field", "word_distance") + .order_by("word_distance"), + [ + {"field": "Cat sat on mat.", "word_distance": 0.5}, + {"field": "Matthew", "word_distance": 0.5555556}, + ], + ) + class TrigramTextFieldTest(TrigramTest): """ |