kopia lustrzana https://github.com/wagtail/wagtail
Skip Elasticsearch backend tests unless the appropriate version of elasticsearch-py is available
These tests seem to have been written with the intent of testing query construction independently of actually running the queries; to do this, they mock the relevant bits of elasticsearch-py so that no actual server needs to be running. However, this is a bit of a bodge job - it still instantiates the Elasticsearch object when initialising the backend, so *some* version of elasticsearch-py must be installed to run Wagtail's test suite; and furthermore, that installed version must be able to handle EVERY backend's variant of the `Elasticsearch(...)` constructor, regardless of whether it was written for a completely different version. This breaks down with Elasticsearch 8, which makes backward-incompatible changes to the constructor. Since the CI suite as a whole will test each backend with its corresponding correct version of elasticsearch-py at some point, it's redundant (and a waste of CPU cycles) to repeat those tests in environments with a different ES version (or none at all).pull/10477/head
rodzic
13c35a8780
commit
06df4a66e1
1
setup.py
1
setup.py
|
@ -43,7 +43,6 @@ testing_extras = [
|
|||
# Required for running the tests
|
||||
"python-dateutil>=2.7",
|
||||
"pytz>=2014.7",
|
||||
"elasticsearch>=5.0,<6.0",
|
||||
"Jinja2>=3.0,<3.2",
|
||||
"boto3>=1.16,<1.17",
|
||||
"freezegun>=0.3.8",
|
||||
|
|
|
@ -1,22 +1,31 @@
|
|||
import datetime
|
||||
import json
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
from django.db.models import Q
|
||||
from django.test import TestCase
|
||||
from elasticsearch.serializer import JSONSerializer
|
||||
|
||||
from wagtail.search.backends.elasticsearch5 import Elasticsearch5SearchBackend
|
||||
from wagtail.search.query import MATCH_ALL, Fuzzy, Phrase
|
||||
from wagtail.test.search import models
|
||||
|
||||
from .elasticsearch_common_tests import ElasticsearchCommonSearchBackendTests
|
||||
|
||||
try:
|
||||
from elasticsearch import VERSION as ELASTICSEARCH_VERSION
|
||||
from elasticsearch.serializer import JSONSerializer
|
||||
|
||||
from wagtail.search.backends.elasticsearch5 import Elasticsearch5SearchBackend
|
||||
except ImportError:
|
||||
ELASTICSEARCH_VERSION = (0, 0, 0)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 5, "Elasticsearch 5 required")
|
||||
class TestElasticsearch5SearchBackend(ElasticsearchCommonSearchBackendTests, TestCase):
|
||||
backend_path = "wagtail.search.backends.elasticsearch5"
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 5, "Elasticsearch 5 required")
|
||||
class TestElasticsearch5SearchQuery(TestCase):
|
||||
def assertDictEqual(self, a, b):
|
||||
default = JSONSerializer().default
|
||||
|
@ -25,10 +34,13 @@ class TestElasticsearch5SearchQuery(TestCase):
|
|||
json.dumps(b, sort_keys=True, default=default),
|
||||
)
|
||||
|
||||
query_compiler_class = Elasticsearch5SearchBackend.query_compiler_class
|
||||
autocomplete_query_compiler_class = (
|
||||
Elasticsearch5SearchBackend.autocomplete_query_compiler_class
|
||||
)
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.query_compiler_class = Elasticsearch5SearchBackend.query_compiler_class
|
||||
cls.autocomplete_query_compiler_class = (
|
||||
Elasticsearch5SearchBackend.autocomplete_query_compiler_class
|
||||
)
|
||||
|
||||
def test_simple(self):
|
||||
# Create a query
|
||||
|
@ -622,6 +634,7 @@ class TestElasticsearch5SearchQuery(TestCase):
|
|||
self.assertDictEqual(query_compiler.get_query(), expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 5, "Elasticsearch 5 required")
|
||||
class TestElasticsearch5SearchResults(TestCase):
|
||||
fixtures = ["search"]
|
||||
|
||||
|
@ -797,6 +810,7 @@ class TestElasticsearch5SearchResults(TestCase):
|
|||
self.assertEqual(results[2], models.Book.objects.get(id=1))
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 5, "Elasticsearch 5 required")
|
||||
class TestElasticsearch5Mapping(TestCase):
|
||||
fixtures = ["search"]
|
||||
|
||||
|
@ -926,6 +940,7 @@ class TestElasticsearch5Mapping(TestCase):
|
|||
self.assertDictEqual(document, expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 5, "Elasticsearch 5 required")
|
||||
class TestElasticsearch5MappingInheritance(TestCase):
|
||||
fixtures = ["search"]
|
||||
|
||||
|
@ -1119,6 +1134,7 @@ class TestElasticsearch5MappingInheritance(TestCase):
|
|||
self.assertDictEqual(document, expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 5, "Elasticsearch 5 required")
|
||||
@mock.patch("wagtail.search.backends.elasticsearch5.Elasticsearch")
|
||||
class TestBackendConfiguration(TestCase):
|
||||
def test_default_settings(self, Elasticsearch):
|
||||
|
|
|
@ -1,22 +1,31 @@
|
|||
import datetime
|
||||
import json
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
from django.db.models import Q
|
||||
from django.test import TestCase
|
||||
from elasticsearch.serializer import JSONSerializer
|
||||
|
||||
from wagtail.search.backends.elasticsearch6 import Elasticsearch6SearchBackend
|
||||
from wagtail.search.query import MATCH_ALL, Fuzzy, Phrase
|
||||
from wagtail.test.search import models
|
||||
|
||||
from .elasticsearch_common_tests import ElasticsearchCommonSearchBackendTests
|
||||
|
||||
try:
|
||||
from elasticsearch import VERSION as ELASTICSEARCH_VERSION
|
||||
from elasticsearch.serializer import JSONSerializer
|
||||
|
||||
from wagtail.search.backends.elasticsearch6 import Elasticsearch6SearchBackend
|
||||
except ImportError:
|
||||
ELASTICSEARCH_VERSION = (0, 0, 0)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 6, "Elasticsearch 6 required")
|
||||
class TestElasticsearch6SearchBackend(ElasticsearchCommonSearchBackendTests, TestCase):
|
||||
backend_path = "wagtail.search.backends.elasticsearch6"
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 6, "Elasticsearch 6 required")
|
||||
class TestElasticsearch6SearchQuery(TestCase):
|
||||
def assertDictEqual(self, a, b):
|
||||
default = JSONSerializer().default
|
||||
|
@ -25,10 +34,13 @@ class TestElasticsearch6SearchQuery(TestCase):
|
|||
json.dumps(b, sort_keys=True, default=default),
|
||||
)
|
||||
|
||||
query_compiler_class = Elasticsearch6SearchBackend.query_compiler_class
|
||||
autocomplete_query_compiler_class = (
|
||||
Elasticsearch6SearchBackend.autocomplete_query_compiler_class
|
||||
)
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.query_compiler_class = Elasticsearch6SearchBackend.query_compiler_class
|
||||
cls.autocomplete_query_compiler_class = (
|
||||
Elasticsearch6SearchBackend.autocomplete_query_compiler_class
|
||||
)
|
||||
|
||||
def test_simple(self):
|
||||
# Create a query
|
||||
|
@ -854,6 +866,7 @@ class TestElasticsearch6SearchQuery(TestCase):
|
|||
self.assertDictEqual(query_compiler.get_query(), expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 6, "Elasticsearch 6 required")
|
||||
class TestElasticsearch6SearchResults(TestCase):
|
||||
fixtures = ["search"]
|
||||
|
||||
|
@ -1029,6 +1042,7 @@ class TestElasticsearch6SearchResults(TestCase):
|
|||
self.assertEqual(results[2], models.Book.objects.get(id=1))
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 6, "Elasticsearch 6 required")
|
||||
class TestElasticsearch6Mapping(TestCase):
|
||||
fixtures = ["search"]
|
||||
|
||||
|
@ -1144,6 +1158,7 @@ class TestElasticsearch6Mapping(TestCase):
|
|||
self.assertDictEqual(document, expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 6, "Elasticsearch 6 required")
|
||||
class TestElasticsearch6MappingInheritance(TestCase):
|
||||
fixtures = ["search"]
|
||||
|
||||
|
@ -1314,6 +1329,7 @@ class TestElasticsearch6MappingInheritance(TestCase):
|
|||
self.assertDictEqual(document, expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 6, "Elasticsearch 6 required")
|
||||
@mock.patch("wagtail.search.backends.elasticsearch5.Elasticsearch")
|
||||
class TestBackendConfiguration(TestCase):
|
||||
def test_default_settings(self, Elasticsearch):
|
||||
|
|
|
@ -1,22 +1,31 @@
|
|||
import datetime
|
||||
import json
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
from django.db.models import Q
|
||||
from django.test import TestCase
|
||||
from elasticsearch.serializer import JSONSerializer
|
||||
|
||||
from wagtail.search.backends.elasticsearch7 import Elasticsearch7SearchBackend
|
||||
from wagtail.search.query import MATCH_ALL, Fuzzy, Phrase
|
||||
from wagtail.test.search import models
|
||||
|
||||
from .elasticsearch_common_tests import ElasticsearchCommonSearchBackendTests
|
||||
|
||||
try:
|
||||
from elasticsearch import VERSION as ELASTICSEARCH_VERSION
|
||||
from elasticsearch.serializer import JSONSerializer
|
||||
|
||||
from wagtail.search.backends.elasticsearch7 import Elasticsearch7SearchBackend
|
||||
except ImportError:
|
||||
ELASTICSEARCH_VERSION = (0, 0, 0)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 7, "Elasticsearch 7 required")
|
||||
class TestElasticsearch7SearchBackend(ElasticsearchCommonSearchBackendTests, TestCase):
|
||||
backend_path = "wagtail.search.backends.elasticsearch7"
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 7, "Elasticsearch 7 required")
|
||||
class TestElasticsearch7SearchQuery(TestCase):
|
||||
maxDiff = None
|
||||
|
||||
|
@ -27,10 +36,13 @@ class TestElasticsearch7SearchQuery(TestCase):
|
|||
json.dumps(b, sort_keys=True, default=default),
|
||||
)
|
||||
|
||||
query_compiler_class = Elasticsearch7SearchBackend.query_compiler_class
|
||||
autocomplete_query_compiler_class = (
|
||||
Elasticsearch7SearchBackend.autocomplete_query_compiler_class
|
||||
)
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.query_compiler_class = Elasticsearch7SearchBackend.query_compiler_class
|
||||
cls.autocomplete_query_compiler_class = (
|
||||
Elasticsearch7SearchBackend.autocomplete_query_compiler_class
|
||||
)
|
||||
|
||||
def test_simple(self):
|
||||
# Create a query
|
||||
|
@ -856,6 +868,7 @@ class TestElasticsearch7SearchQuery(TestCase):
|
|||
self.assertDictEqual(query_compiler.get_query(), expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 7, "Elasticsearch 7 required")
|
||||
class TestElasticsearch7SearchResults(TestCase):
|
||||
fixtures = ["search"]
|
||||
|
||||
|
@ -1031,6 +1044,7 @@ class TestElasticsearch7SearchResults(TestCase):
|
|||
self.assertEqual(results[2], models.Book.objects.get(id=1))
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 7, "Elasticsearch 7 required")
|
||||
class TestElasticsearch7Mapping(TestCase):
|
||||
fixtures = ["search"]
|
||||
|
||||
|
@ -1146,6 +1160,7 @@ class TestElasticsearch7Mapping(TestCase):
|
|||
self.assertDictEqual(document, expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 7, "Elasticsearch 7 required")
|
||||
class TestElasticsearch7MappingInheritance(TestCase):
|
||||
fixtures = ["search"]
|
||||
maxDiff = None
|
||||
|
@ -1315,6 +1330,7 @@ class TestElasticsearch7MappingInheritance(TestCase):
|
|||
self.assertDictEqual(document, expected_result)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 7, "Elasticsearch 7 required")
|
||||
@mock.patch("wagtail.search.backends.elasticsearch5.Elasticsearch")
|
||||
class TestBackendConfiguration(TestCase):
|
||||
def test_default_settings(self, Elasticsearch):
|
||||
|
|
|
@ -1,7 +1,15 @@
|
|||
import unittest
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from .elasticsearch_common_tests import ElasticsearchCommonSearchBackendTests
|
||||
|
||||
try:
|
||||
from elasticsearch import VERSION as ELASTICSEARCH_VERSION
|
||||
except ImportError:
|
||||
ELASTICSEARCH_VERSION = (0, 0, 0)
|
||||
|
||||
|
||||
@unittest.skipIf(ELASTICSEARCH_VERSION[0] != 8, "Elasticsearch 8 required")
|
||||
class TestElasticsearch8SearchBackend(ElasticsearchCommonSearchBackendTests, TestCase):
|
||||
backend_path = "wagtail.search.backends.elasticsearch8"
|
||||
|
|
Ładowanie…
Reference in New Issue