summaryrefslogtreecommitdiff
path: root/tests/postgres_tests
diff options
context:
space:
mode:
authorBaptiste Mispelon <bmispelon@gmail.com>2020-03-04 13:33:12 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-03-16 10:27:23 +0100
commit3baf92cf8230ad3a932986170fd07c8feae7ff2f (patch)
treed40a4ccf7e8d693615e908fb40f0612e1495635a /tests/postgres_tests
parent924c01ba095f7df9529a65c176a892a5c1624ec5 (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.py11
-rw-r--r--tests/postgres_tests/models.py5
-rw-r--r--tests/postgres_tests/test_search.py14
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):