diff options
| author | Nikita Marchant <nikita.marchant@gmail.com> | 2021-09-15 12:57:49 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-09-17 13:05:15 +0200 |
| commit | 4e4082f9396e21de0bd88dbfc651da9ad01c7c0c (patch) | |
| tree | 34d93d1ef520a097f95cf46cd854ea47700214ef /tests | |
| parent | 4ca508a68916dd43da45fd6e8b9004824a62d9c8 (diff) | |
Fixed #32492 -- Added TrigramWordSimilarity() and TrigramWordDistance() on PostgreSQL.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/postgres_tests/migrations/0002_create_test_models.py | 2 | ||||
| -rw-r--r-- | tests/postgres_tests/models.py | 2 | ||||
| -rw-r--r-- | tests/postgres_tests/test_trigram.py | 39 |
3 files changed, 40 insertions, 3 deletions
diff --git a/tests/postgres_tests/migrations/0002_create_test_models.py b/tests/postgres_tests/migrations/0002_create_test_models.py index c3ab5efed7..1ce875441b 100644 --- a/tests/postgres_tests/migrations/0002_create_test_models.py +++ b/tests/postgres_tests/migrations/0002_create_test_models.py @@ -110,7 +110,7 @@ class Migration(migrations.Migration): name='CharFieldModel', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('field', models.CharField(max_length=16)), + ('field', models.CharField(max_length=64)), ], options=None, bases=None, diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py index c7f55a2661..ddae9d1edb 100644 --- a/tests/postgres_tests/models.py +++ b/tests/postgres_tests/models.py @@ -83,7 +83,7 @@ class ArrayEnumModel(PostgreSQLModel): class CharFieldModel(models.Model): - field = models.CharField(max_length=16) + field = models.CharField(max_length=64) class TextFieldModel(models.Model): diff --git a/tests/postgres_tests/test_trigram.py b/tests/postgres_tests/test_trigram.py index a5d7d868be..079a32a19b 100644 --- a/tests/postgres_tests/test_trigram.py +++ b/tests/postgres_tests/test_trigram.py @@ -5,7 +5,8 @@ from .models import CharFieldModel, TextFieldModel try: from django.contrib.postgres.search import ( - TrigramDistance, TrigramSimilarity, + TrigramDistance, TrigramSimilarity, TrigramWordDistance, + TrigramWordSimilarity, ) except ImportError: pass @@ -30,6 +31,15 @@ class TrigramTest(PostgreSQLTestCase): transform=lambda instance: instance.field, ) + def test_trigram_word_search(self): + obj = self.Model.objects.create( + field='Gumby rides on the path of Middlesbrough', + ) + self.assertSequenceEqual( + self.Model.objects.filter(field__trigram_word_similar='Middlesborough'), + [obj], + ) + def test_trigram_similarity(self): search = 'Bat sat on cat.' # Round result of similarity because PostgreSQL 12+ uses greater @@ -43,6 +53,20 @@ class TrigramTest(PostgreSQLTestCase): ordered=True, ) + def test_trigram_word_similarity(self): + 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'), + [ + {'field': 'Cat sat on mat.', 'word_similarity': 1.0}, + {'field': 'Matthew', 'word_similarity': 0.75}, + ], + ) + def test_trigram_similarity_alternate(self): # Round result of distance because PostgreSQL 12+ uses greater # precision. @@ -55,6 +79,19 @@ class TrigramTest(PostgreSQLTestCase): ordered=True, ) + def test_trigram_word_similarity_alternate(self): + self.assertSequenceEqual( + self.Model.objects.annotate( + word_distance=TrigramWordDistance('mat', 'field'), + ).filter( + word_distance__lte=0.7, + ).values('field', 'word_distance').order_by('word_distance'), + [ + {'field': 'Cat sat on mat.', 'word_distance': 0}, + {'field': 'Matthew', 'word_distance': 0.25}, + ], + ) + class TrigramTextFieldTest(TrigramTest): """ |
