diff options
Diffstat (limited to 'tests/postgres_tests')
| -rw-r--r-- | tests/postgres_tests/test_search.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/postgres_tests/test_search.py b/tests/postgres_tests/test_search.py index 93d86bf275..0bf2df50f1 100644 --- a/tests/postgres_tests/test_search.py +++ b/tests/postgres_tests/test_search.py @@ -205,14 +205,46 @@ class TestCombinations(GrailTestData, PostgreSQLTestCase): ).filter(search=SearchQuery('bedemir') & SearchQuery('scales')) self.assertSequenceEqual(searched, [self.bedemir0]) + def test_query_multiple_and(self): + searched = Line.objects.annotate( + search=SearchVector('scene__setting', 'dialogue'), + ).filter(search=SearchQuery('bedemir') & SearchQuery('scales') & SearchQuery('nostrils')) + self.assertSequenceEqual(searched, []) + + searched = Line.objects.annotate( + search=SearchVector('scene__setting', 'dialogue'), + ).filter(search=SearchQuery('shall') & SearchQuery('use') & SearchQuery('larger')) + self.assertSequenceEqual(searched, [self.bedemir0]) + def test_query_or(self): searched = Line.objects.filter(dialogue__search=SearchQuery('kneecaps') | SearchQuery('nostrils')) self.assertSequenceEqual(set(searched), {self.verse1, self.verse2}) + def test_query_multiple_or(self): + searched = Line.objects.filter( + dialogue__search=SearchQuery('kneecaps') | SearchQuery('nostrils') | SearchQuery('Sir Robin') + ) + self.assertSequenceEqual(set(searched), {self.verse1, self.verse2, self.verse0}) + def test_query_invert(self): searched = Line.objects.filter(character=self.minstrel, dialogue__search=~SearchQuery('kneecaps')) self.assertEqual(set(searched), {self.verse0, self.verse2}) + def test_query_config_mismatch(self): + with self.assertRaisesMessage(TypeError, "SearchQuery configs don't match."): + Line.objects.filter( + dialogue__search=SearchQuery('kneecaps', config='german') | + SearchQuery('nostrils', config='english') + ) + + def test_query_combined_mismatch(self): + msg = "SearchQuery can only be combined with other SearchQuerys, got" + with self.assertRaisesMessage(TypeError, msg): + Line.objects.filter(dialogue__search=None | SearchQuery('kneecaps')) + + with self.assertRaisesMessage(TypeError, msg): + Line.objects.filter(dialogue__search=None & SearchQuery('kneecaps')) + @modify_settings(INSTALLED_APPS={'append': 'django.contrib.postgres'}) class TestRankingAndWeights(GrailTestData, PostgreSQLTestCase): |
