diff --git a/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py b/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py index c7fe29b16..8724feadc 100644 --- a/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py +++ b/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py @@ -13,13 +13,7 @@ from django.test import TestCase from django.db.models import Q from wagtail.wagtailsearch.backends import get_search_backend -from wagtail.wagtailsearch.backends.elasticsearch import ( - ElasticSearch, - ElasticSearchMapping, - ElasticSearchResults, - ElasticSearchQuery, - ElasticSearchAtomicIndexRebuilder, -) +from wagtail.wagtailsearch.backends.elasticsearch import ElasticSearch from wagtail.tests.search import models from .test_backends import BackendTests @@ -239,9 +233,11 @@ class TestElasticSearchQuery(TestCase): json.dumps(a, sort_keys=True, default=default), json.dumps(b, sort_keys=True, default=default) ) + query_class = ElasticSearch.query_class + def test_simple(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.all(), "Hello") + query = self.query_class(models.SearchTest.objects.all(), "Hello") # Check it expected_result = {'filtered': { @@ -252,7 +248,7 @@ class TestElasticSearchQuery(TestCase): def test_none_query_string(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.all(), None) + query = self.query_class(models.SearchTest.objects.all(), None) # Check it expected_result = {'filtered': { @@ -263,7 +259,7 @@ class TestElasticSearchQuery(TestCase): def test_and_operator(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.all(), "Hello", operator='and') + query = self.query_class(models.SearchTest.objects.all(), "Hello", operator='and') # Check it expected_result = {'filtered': { @@ -274,7 +270,7 @@ class TestElasticSearchQuery(TestCase): def test_filter(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.filter(title="Test"), "Hello") + query = self.query_class(models.SearchTest.objects.filter(title="Test"), "Hello") # Check it expected_result = {'filtered': {'filter': {'and': [ @@ -285,7 +281,7 @@ class TestElasticSearchQuery(TestCase): def test_and_filter(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.filter(title="Test", live=True), "Hello") + query = self.query_class(models.SearchTest.objects.filter(title="Test", live=True), "Hello") # Check it expected_result = {'filtered': {'filter': {'and': [ @@ -302,7 +298,7 @@ class TestElasticSearchQuery(TestCase): def test_or_filter(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.filter(Q(title="Test") | Q(live=True)), "Hello") + query = self.query_class(models.SearchTest.objects.filter(Q(title="Test") | Q(live=True)), "Hello") # Make sure field filters are sorted (as they can be in any order which may cause false positives) query = query.get_query() @@ -318,7 +314,7 @@ class TestElasticSearchQuery(TestCase): def test_negated_filter(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.exclude(live=True), "Hello") + query = self.query_class(models.SearchTest.objects.exclude(live=True), "Hello") # Check it expected_result = {'filtered': {'filter': {'and': [ @@ -329,7 +325,7 @@ class TestElasticSearchQuery(TestCase): def test_fields(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.all(), "Hello", fields=['title']) + query = self.query_class(models.SearchTest.objects.all(), "Hello", fields=['title']) # Check it expected_result = {'filtered': { @@ -340,7 +336,7 @@ class TestElasticSearchQuery(TestCase): def test_fields_with_and_operator(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.all(), "Hello", fields=['title'], operator='and') + query = self.query_class(models.SearchTest.objects.all(), "Hello", fields=['title'], operator='and') # Check it expected_result = {'filtered': { @@ -351,7 +347,7 @@ class TestElasticSearchQuery(TestCase): def test_multiple_fields(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.all(), "Hello", fields=['title', 'content']) + query = self.query_class(models.SearchTest.objects.all(), "Hello", fields=['title', 'content']) # Check it expected_result = {'filtered': { @@ -362,7 +358,7 @@ class TestElasticSearchQuery(TestCase): def test_multiple_fields_with_and_operator(self): # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.all(), "Hello", fields=['title', 'content'], operator='and' ) @@ -375,7 +371,7 @@ class TestElasticSearchQuery(TestCase): def test_exact_lookup(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.filter(title__exact="Test"), "Hello") + query = self.query_class(models.SearchTest.objects.filter(title__exact="Test"), "Hello") # Check it expected_result = {'filtered': {'filter': {'and': [ @@ -386,7 +382,7 @@ class TestElasticSearchQuery(TestCase): def test_none_lookup(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.filter(title=None), "Hello") + query = self.query_class(models.SearchTest.objects.filter(title=None), "Hello") # Check it expected_result = {'filtered': {'filter': {'and': [ @@ -397,7 +393,7 @@ class TestElasticSearchQuery(TestCase): def test_isnull_true_lookup(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.filter(title__isnull=True), "Hello") + query = self.query_class(models.SearchTest.objects.filter(title__isnull=True), "Hello") # Check it expected_result = {'filtered': {'filter': {'and': [ @@ -408,7 +404,7 @@ class TestElasticSearchQuery(TestCase): def test_isnull_false_lookup(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.filter(title__isnull=False), "Hello") + query = self.query_class(models.SearchTest.objects.filter(title__isnull=False), "Hello") # Check it expected_result = {'filtered': {'filter': {'and': [ @@ -419,7 +415,7 @@ class TestElasticSearchQuery(TestCase): def test_startswith_lookup(self): # Create a query - query = ElasticSearchQuery(models.SearchTest.objects.filter(title__startswith="Test"), "Hello") + query = self.query_class(models.SearchTest.objects.filter(title__startswith="Test"), "Hello") # Check it expected_result = {'filtered': {'filter': {'and': [ @@ -432,7 +428,7 @@ class TestElasticSearchQuery(TestCase): # This also tests conversion of python dates to strings # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.filter(published_date__gt=datetime.datetime(2014, 4, 29)), "Hello" ) @@ -445,7 +441,7 @@ class TestElasticSearchQuery(TestCase): def test_lt_lookup(self): # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.filter(published_date__lt=datetime.datetime(2014, 4, 29)), "Hello" ) @@ -458,7 +454,7 @@ class TestElasticSearchQuery(TestCase): def test_gte_lookup(self): # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.filter(published_date__gte=datetime.datetime(2014, 4, 29)), "Hello" ) @@ -471,7 +467,7 @@ class TestElasticSearchQuery(TestCase): def test_lte_lookup(self): # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.filter(published_date__lte=datetime.datetime(2014, 4, 29)), "Hello" ) @@ -487,7 +483,7 @@ class TestElasticSearchQuery(TestCase): end_date = datetime.datetime(2014, 8, 19) # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.filter(published_date__range=(start_date, end_date)), "Hello" ) @@ -500,7 +496,7 @@ class TestElasticSearchQuery(TestCase): def test_custom_ordering(self): # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.order_by('published_date'), "Hello", order_by_relevance=False ) @@ -510,7 +506,7 @@ class TestElasticSearchQuery(TestCase): def test_custom_ordering_reversed(self): # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.order_by('-published_date'), "Hello", order_by_relevance=False ) @@ -520,7 +516,7 @@ class TestElasticSearchQuery(TestCase): def test_custom_ordering_multiple(self): # Create a query - query = ElasticSearchQuery( + query = self.query_class( models.SearchTest.objects.order_by('published_date', 'live'), "Hello", order_by_relevance=False ) @@ -548,7 +544,7 @@ class TestElasticSearchResults(TestCase): query.queryset = models.SearchTest.objects.all() query.get_query.return_value = 'QUERY' query.get_sort.return_value = None - return ElasticSearchResults(backend, query) + return backend.results_class(backend, query) def construct_search_response(self, results): return { @@ -716,7 +712,7 @@ class TestElasticSearchMapping(TestCase): def setUp(self): # Create ES mapping - self.es_mapping = ElasticSearchMapping(models.SearchTest) + self.es_mapping = ElasticSearch.mapping_class(models.SearchTest) # Create ES document self.obj = models.SearchTest(title="Hello") @@ -798,7 +794,7 @@ class TestElasticSearchMappingInheritance(TestCase): def setUp(self): # Create ES mapping - self.es_mapping = ElasticSearchMapping(models.SearchTestChild) + self.es_mapping = ElasticSearch.mapping_class(models.SearchTestChild) # Create ES document self.obj = models.SearchTestChild(title="Hello", subtitle="World", page_id=1) @@ -1008,7 +1004,7 @@ class TestRebuilder(TestCase): self.rebuilder.add_model(models.SearchTest) # Check the mapping went into Elasticsearch correctly - mapping = ElasticSearchMapping(models.SearchTest) + mapping = ElasticSearch.mapping_class(models.SearchTest) response = self.es.indices.get_mapping(self.backend.es_index, mapping.get_document_type()) # Make some minor tweaks to the mapping so it matches what is in ES @@ -1030,7 +1026,7 @@ class TestRebuilder(TestCase): class TestAtomicRebuilder(TestCase): def setUp(self): self.backend = get_search_backend('elasticsearch') - self.backend.rebuilder_class = ElasticSearchAtomicIndexRebuilder + self.backend.rebuilder_class = self.backend.atomic_rebuilder_class self.es = self.backend.es self.rebuilder = self.backend.get_rebuilder()