diff options
| author | Baptiste Mispelon <bmispelon@gmail.com> | 2020-03-04 13:33:12 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-03-16 10:27:23 +0100 |
| commit | 3baf92cf8230ad3a932986170fd07c8feae7ff2f (patch) | |
| tree | d40a4ccf7e8d693615e908fb40f0612e1495635a /tests/postgres_tests | |
| parent | 924c01ba095f7df9529a65c176a892a5c1624ec5 (diff) | |
Fixed #31340 -- Allowed query expressions in SearchQuery.value and __search lookup.
Diffstat (limited to 'tests/postgres_tests')
| -rw-r--r-- | tests/postgres_tests/migrations/0002_create_test_models.py | 11 | ||||
| -rw-r--r-- | tests/postgres_tests/models.py | 5 | ||||
| -rw-r--r-- | tests/postgres_tests/test_search.py | 14 |
3 files changed, 29 insertions, 1 deletions
diff --git a/tests/postgres_tests/migrations/0002_create_test_models.py b/tests/postgres_tests/migrations/0002_create_test_models.py index 12d94e348a..ee1463e1eb 100644 --- a/tests/postgres_tests/migrations/0002_create_test_models.py +++ b/tests/postgres_tests/migrations/0002_create_test_models.py @@ -186,6 +186,17 @@ class Migration(migrations.Migration): bases=None, ), migrations.CreateModel( + name='LineSavedSearch', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('line', models.ForeignKey('postgres_tests.Line', on_delete=models.CASCADE)), + ('query', models.CharField(max_length=100)), + ], + options={ + 'required_db_vendor': 'postgresql', + }, + ), + migrations.CreateModel( name='AggregateTestModel', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py index 8528c59da1..e803c989e0 100644 --- a/tests/postgres_tests/models.py +++ b/tests/postgres_tests/models.py @@ -139,6 +139,11 @@ class Line(PostgreSQLModel): return self.dialogue or '' +class LineSavedSearch(PostgreSQLModel): + line = models.ForeignKey('Line', models.CASCADE) + query = models.CharField(max_length=100) + + class RangesModel(PostgreSQLModel): ints = IntegerRangeField(blank=True, null=True) bigints = BigIntegerRangeField(blank=True, null=True) diff --git a/tests/postgres_tests/test_search.py b/tests/postgres_tests/test_search.py index 0e836e896b..b40d672920 100644 --- a/tests/postgres_tests/test_search.py +++ b/tests/postgres_tests/test_search.py @@ -10,7 +10,7 @@ from django.db.models import F from django.test import modify_settings, skipUnlessDBFeature from . import PostgreSQLSimpleTestCase, PostgreSQLTestCase -from .models import Character, Line, Scene +from .models import Character, Line, LineSavedSearch, Scene try: from django.contrib.postgres.search import ( @@ -110,6 +110,18 @@ class SimpleSearchTest(GrailTestData, PostgreSQLTestCase): ) self.assertSequenceEqual(searched, [self.verse2]) + def test_search_with_F_expression(self): + # Non-matching query. + LineSavedSearch.objects.create(line=self.verse1, query='hearts') + # Matching query. + match = LineSavedSearch.objects.create(line=self.verse1, query='elbows') + for query_expression in [F('query'), SearchQuery(F('query'))]: + with self.subTest(query_expression): + searched = LineSavedSearch.objects.filter( + line__dialogue__search=query_expression, + ) + self.assertSequenceEqual(searched, [match]) + @modify_settings(INSTALLED_APPS={'append': 'django.contrib.postgres'}) class SearchVectorFieldTest(GrailTestData, PostgreSQLTestCase): |
