summaryrefslogtreecommitdiff
path: root/tests/postgres_tests
diff options
context:
space:
mode:
authorMatt Brewer <matt.brewer693@gmail.com>2022-06-17 08:44:03 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-06-17 11:14:30 +0200
commit8d160f154f0240a423e83ffe0690e472f837373c (patch)
tree20acebc9fd78a3aa4fb58d30e4e1e1194dfb47ae /tests/postgres_tests
parent3ef37a5245015f69a9b9f884ebc289a35d02c5f6 (diff)
downloaddjango-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.py48
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):
"""