mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-13 17:52:19 +03:00
refactoring of elasticsearch filter test
This commit is contained in:
parent
8692c82266
commit
721894fe1a
68
graphene_django/elasticsearch/tests/commons.py
Normal file
68
graphene_django/elasticsearch/tests/commons.py
Normal file
|
@ -0,0 +1,68 @@
|
|||
from datetime import datetime
|
||||
|
||||
from mock import mock
|
||||
|
||||
from graphene import Schema
|
||||
|
||||
from graphene_django.tests.models import Article, Reporter
|
||||
from graphene_django.elasticsearch.tests.filters import ESFilterQuery, ArticleDocument
|
||||
|
||||
|
||||
def fake_data():
|
||||
r1 = Reporter.objects.create(first_name="r1", last_name="r1", email="r1@test.com")
|
||||
a1 = Article.objects.create(
|
||||
headline="a1",
|
||||
pub_date=datetime.now(),
|
||||
pub_date_time=datetime.now(),
|
||||
reporter=r1,
|
||||
editor=r1,
|
||||
)
|
||||
a2 = Article.objects.create(
|
||||
headline="a2",
|
||||
pub_date=datetime.now(),
|
||||
pub_date_time=datetime.now(),
|
||||
reporter=r1,
|
||||
editor=r1,
|
||||
)
|
||||
return a1, a2
|
||||
|
||||
|
||||
def generate_query(field, query_str):
|
||||
query = """
|
||||
query {
|
||||
%s(%s) {
|
||||
edges {
|
||||
node {
|
||||
headline
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
""" % (field, query_str)
|
||||
return query
|
||||
|
||||
|
||||
def filter_generation(field, query_str, expected_arguments, method_to_mock="query"):
|
||||
a1, a2 = fake_data()
|
||||
|
||||
query = generate_query(field, query_str)
|
||||
|
||||
mock_count = mock.Mock(return_value=3)
|
||||
mock_slice = mock.Mock(return_value=mock.Mock(to_queryset=mock.Mock(
|
||||
return_value=Article.objects.filter(pk__in=[a1.id, a2.id])
|
||||
)))
|
||||
mock_query = mock.Mock(return_value=ArticleDocument.search())
|
||||
|
||||
with mock.patch('django_elasticsearch_dsl.search.Search.count', mock_count), \
|
||||
mock.patch('django_elasticsearch_dsl.search.Search.__getitem__', mock_slice), \
|
||||
mock.patch("elasticsearch_dsl.Search.%s" % method_to_mock, mock_query):
|
||||
schema = Schema(query=ESFilterQuery)
|
||||
result = schema.execute(query)
|
||||
|
||||
assert not result.errors
|
||||
|
||||
mock_query.assert_called_with(expected_arguments)
|
||||
|
||||
assert len(result.data[field]["edges"]) == 2
|
||||
assert result.data[field]["edges"][0]["node"]["headline"] == "a1"
|
||||
assert result.data[field]["edges"][1]["node"]["headline"] == "a2"
|
|
@ -1,325 +0,0 @@
|
|||
from datetime import datetime
|
||||
|
||||
import pytest
|
||||
from py.test import raises
|
||||
from mock import mock
|
||||
|
||||
from elasticsearch_dsl.query import Bool, Match, Term, Wildcard, MatchPhrase, MatchPhrasePrefix, Range, Terms, Exists
|
||||
from graphene import Schema, ObjectType
|
||||
|
||||
from graphene_django.elasticsearch.filter.fields import DjangoESFilterConnectionField
|
||||
from graphene_django.elasticsearch.filter.filterset import FilterSetES
|
||||
from graphene_django.filter.tests.test_fields import ArticleNode
|
||||
from graphene_django.tests.models import Article, Reporter
|
||||
from graphene_django.utils import DJANGO_FILTER_INSTALLED, DJANGO_ELASTICSEARCH_DSL_INSTALLED
|
||||
from graphene_django.elasticsearch.tests.filters import ESFilterQuery, ArticleDocument
|
||||
|
||||
pytestmark = []
|
||||
|
||||
if not DJANGO_FILTER_INSTALLED or not DJANGO_ELASTICSEARCH_DSL_INSTALLED:
|
||||
pytestmark.append(
|
||||
pytest.mark.skipif(
|
||||
True, reason="django_filters not installed or not compatible"
|
||||
)
|
||||
)
|
||||
|
||||
pytestmark.append(pytest.mark.django_db)
|
||||
|
||||
|
||||
def fake_data():
|
||||
r1 = Reporter.objects.create(first_name="r1", last_name="r1", email="r1@test.com")
|
||||
a1 = Article.objects.create(
|
||||
headline="a1",
|
||||
pub_date=datetime.now(),
|
||||
pub_date_time=datetime.now(),
|
||||
reporter=r1,
|
||||
editor=r1,
|
||||
)
|
||||
a2 = Article.objects.create(
|
||||
headline="a2",
|
||||
pub_date=datetime.now(),
|
||||
pub_date_time=datetime.now(),
|
||||
reporter=r1,
|
||||
editor=r1,
|
||||
)
|
||||
return a1, a2
|
||||
|
||||
|
||||
def generate_query(field, query_str):
|
||||
query = """
|
||||
query {
|
||||
%s(%s) {
|
||||
edges {
|
||||
node {
|
||||
headline
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
""" % (field, query_str)
|
||||
return query
|
||||
|
||||
|
||||
def filter_generation(field, query_str, expected_arguments, method_to_mock="query"):
|
||||
a1, a2 = fake_data()
|
||||
|
||||
query = generate_query(field, query_str)
|
||||
|
||||
mock_count = mock.Mock(return_value=3)
|
||||
mock_slice = mock.Mock(return_value=mock.Mock(to_queryset=mock.Mock(
|
||||
return_value=Article.objects.filter(pk__in=[a1.id, a2.id])
|
||||
)))
|
||||
mock_query = mock.Mock(return_value=ArticleDocument.search())
|
||||
|
||||
with mock.patch('django_elasticsearch_dsl.search.Search.count', mock_count), \
|
||||
mock.patch('django_elasticsearch_dsl.search.Search.__getitem__', mock_slice), \
|
||||
mock.patch("elasticsearch_dsl.Search.%s" % method_to_mock, mock_query):
|
||||
schema = Schema(query=ESFilterQuery)
|
||||
result = schema.execute(query)
|
||||
|
||||
assert not result.errors
|
||||
|
||||
mock_query.assert_called_with(expected_arguments)
|
||||
|
||||
assert len(result.data[field]["edges"]) == 2
|
||||
assert result.data[field]["edges"][0]["node"]["headline"] == "a1"
|
||||
assert result.data[field]["edges"][1]["node"]["headline"] == "a2"
|
||||
|
||||
|
||||
def test_filter_string():
|
||||
filter_generation(
|
||||
"articlesAsField",
|
||||
"headline: \"A text\"",
|
||||
Bool(must=[Match(headline={'query': 'A text', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_string_date():
|
||||
filter_generation(
|
||||
"articlesAsField",
|
||||
"headline: \"A text\"",
|
||||
Bool(must=[Match(headline={'query': 'A text', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_as_field_order_by():
|
||||
filter_generation(
|
||||
"articlesAsField",
|
||||
"headline: \"A text\", sort:{order:desc, field:id}",
|
||||
{'id': {'order': 'desc'}},
|
||||
"sort"
|
||||
)
|
||||
|
||||
|
||||
def test_filter_as_field_order_by_dict():
|
||||
filter_generation(
|
||||
"articlesInMeta",
|
||||
"headline: \"A text\", sort:{order:desc, field:id}",
|
||||
{'es_id': {'order': 'desc'}},
|
||||
"sort"
|
||||
)
|
||||
|
||||
|
||||
def test_filter_in_meta():
|
||||
filter_generation(
|
||||
"articlesInMeta",
|
||||
"headline: \"A text\"",
|
||||
Bool(must=[Match(headline={'query': 'A text', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_in_meta_dict():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headline: \"A text\"",
|
||||
Bool(must=[Match(headline={'query': 'A text', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_in_meta_dict_foreign():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"reporterEamail: \"A mail\"",
|
||||
Bool(must=[Match(reporter__email={'query': 'A mail', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_in_multi_field():
|
||||
filter_generation(
|
||||
"articlesInMultiField",
|
||||
"contain: \"A text\"",
|
||||
Bool(must=[Bool(should=[
|
||||
Match(headline={'query': 'A text', 'fuzziness': 'auto'}),
|
||||
Match(lang={'query': 'A text', 'fuzziness': 'auto'})
|
||||
])]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_generating_all():
|
||||
filter_generation(
|
||||
"articlesInGenerateAll",
|
||||
"headline: \"A text\", "
|
||||
"pubDate: \"0000-00-00\", "
|
||||
"pubDateTime: \"00:00:00\", "
|
||||
"lang: \"es\", "
|
||||
"importance: 1, ",
|
||||
Bool(must=[
|
||||
Match(headline={'query': 'A text', 'fuzziness': 'auto'}),
|
||||
Match(pub_date={'query': '0000-00-00', 'fuzziness': 'auto'}),
|
||||
Match(pub_date_time={'query': '00:00:00', 'fuzziness': 'auto'}),
|
||||
Match(lang={'query': 'es', 'fuzziness': 'auto'}),
|
||||
Term(importance=1)
|
||||
]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_generating_exclude():
|
||||
query = generate_query("articlesInExcludes", "headline: \"A text\", ")
|
||||
|
||||
schema = Schema(query=ESFilterQuery)
|
||||
result = schema.execute(query)
|
||||
|
||||
assert len(result.errors) > 0
|
||||
|
||||
|
||||
def test_filter_bad_processor():
|
||||
class ArticleFilterBadProcessor(FilterSetES):
|
||||
"""Article Filter for ES"""
|
||||
|
||||
class Meta(object):
|
||||
"""Metaclass data"""
|
||||
index = ArticleDocument
|
||||
includes = {
|
||||
'headline': {
|
||||
'lookup_expressions': ['bad_processor']
|
||||
}
|
||||
}
|
||||
|
||||
with raises(ValueError) as error_info:
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, filterset_class=ArticleFilterBadProcessor
|
||||
)
|
||||
|
||||
assert "bad_processor" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_field_without_filterset_class():
|
||||
with raises(ValueError) as error_info:
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode
|
||||
)
|
||||
|
||||
assert "filterset_class" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_field_with_fields():
|
||||
with raises(ValueError) as error_info:
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, fields=['headline']
|
||||
)
|
||||
|
||||
assert "fields" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_field_with_order_by():
|
||||
with raises(ValueError) as error_info:
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, order_by=['headline']
|
||||
)
|
||||
|
||||
assert "order_by" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_filterset_without_index():
|
||||
with raises(ValueError) as error_info:
|
||||
class ArticleFilterBadProcessor(FilterSetES):
|
||||
"""Article Filter for ES"""
|
||||
|
||||
class Meta(object):
|
||||
"""Metaclass data"""
|
||||
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, filterset_class=ArticleFilterBadProcessor
|
||||
)
|
||||
|
||||
assert "Index in Meta" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_filterset_without_xcludes():
|
||||
with raises(ValueError) as error_info:
|
||||
class ArticleFilterBadProcessor(FilterSetES):
|
||||
"""Article Filter for ES"""
|
||||
|
||||
class Meta(object):
|
||||
"""Metaclass data"""
|
||||
index = ArticleDocument
|
||||
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, filterset_class=ArticleFilterBadProcessor
|
||||
)
|
||||
|
||||
assert "includes or excludes field in Meta" in str(error_info.value)
|
||||
|
||||
|
||||
def test_processor_term():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineTerm: \"A text\"",
|
||||
Bool(must=[Term(headline='A text')]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_regex():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineRegex: \"A text\"",
|
||||
Bool(must=[Wildcard(headline='A text')]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_phrase():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlinePhrase: \"A text\"",
|
||||
Bool(must=[MatchPhrase(headline={'query': 'A text'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_prefix():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlinePrefix: \"A text\"",
|
||||
Bool(must=[MatchPhrasePrefix(headline={'query': 'A text'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_in():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineIn: [\"A text 1\", \"A text 2\"]",
|
||||
Bool(must=[Terms(headline=['A text 1', 'A text 2'])]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_exits():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineExits: true",
|
||||
Bool(must=[Bool(must=[Exists(field='headline')])]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_lte():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineLte: \"A text\"",
|
||||
Bool(must=Range(headline={'lte': 'A text'})),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_gte():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineGte: \"A text\"",
|
||||
Bool(must=Range(headline={'gte': 'A text'})),
|
||||
)
|
98
graphene_django/elasticsearch/tests/test_filter_fields.py
Normal file
98
graphene_django/elasticsearch/tests/test_filter_fields.py
Normal file
|
@ -0,0 +1,98 @@
|
|||
import pytest
|
||||
from py.test import raises
|
||||
|
||||
from graphene_django.elasticsearch.filter.fields import DjangoESFilterConnectionField
|
||||
from graphene_django.elasticsearch.filter.filterset import FilterSetES
|
||||
from graphene_django.filter.tests.test_fields import ArticleNode
|
||||
from graphene_django.elasticsearch.tests.filters import ArticleDocument
|
||||
from graphene_django.utils import DJANGO_FILTER_INSTALLED, DJANGO_ELASTICSEARCH_DSL_INSTALLED
|
||||
|
||||
pytestmark = []
|
||||
|
||||
if not DJANGO_FILTER_INSTALLED or not DJANGO_ELASTICSEARCH_DSL_INSTALLED:
|
||||
pytestmark.append(
|
||||
pytest.mark.skipif(
|
||||
True, reason="django_filters not installed or not compatible"
|
||||
)
|
||||
)
|
||||
|
||||
pytestmark.append(pytest.mark.django_db)
|
||||
|
||||
|
||||
def test_filter_bad_processor():
|
||||
class ArticleFilterBadProcessor(FilterSetES):
|
||||
"""Article Filter for ES"""
|
||||
|
||||
class Meta(object):
|
||||
"""Metaclass data"""
|
||||
index = ArticleDocument
|
||||
includes = {
|
||||
'headline': {
|
||||
'lookup_expressions': ['bad_processor']
|
||||
}
|
||||
}
|
||||
|
||||
with raises(ValueError) as error_info:
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, filterset_class=ArticleFilterBadProcessor
|
||||
)
|
||||
|
||||
assert "bad_processor" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_field_without_filterset_class():
|
||||
with raises(ValueError) as error_info:
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode
|
||||
)
|
||||
|
||||
assert "filterset_class" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_field_with_fields():
|
||||
with raises(ValueError) as error_info:
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, fields=['headline']
|
||||
)
|
||||
|
||||
assert "fields" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_field_with_order_by():
|
||||
with raises(ValueError) as error_info:
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, order_by=['headline']
|
||||
)
|
||||
|
||||
assert "order_by" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_filterset_without_index():
|
||||
with raises(ValueError) as error_info:
|
||||
class ArticleFilterBadProcessor(FilterSetES):
|
||||
"""Article Filter for ES"""
|
||||
|
||||
class Meta(object):
|
||||
"""Metaclass data"""
|
||||
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, filterset_class=ArticleFilterBadProcessor
|
||||
)
|
||||
|
||||
assert "Index in Meta" in str(error_info.value)
|
||||
|
||||
|
||||
def test_filter_filterset_without_xcludes():
|
||||
with raises(ValueError) as error_info:
|
||||
class ArticleFilterBadProcessor(FilterSetES):
|
||||
"""Article Filter for ES"""
|
||||
|
||||
class Meta(object):
|
||||
"""Metaclass data"""
|
||||
index = ArticleDocument
|
||||
|
||||
DjangoESFilterConnectionField(
|
||||
ArticleNode, filterset_class=ArticleFilterBadProcessor
|
||||
)
|
||||
|
||||
assert "includes or excludes field in Meta" in str(error_info.value)
|
114
graphene_django/elasticsearch/tests/test_filter_filters.py
Normal file
114
graphene_django/elasticsearch/tests/test_filter_filters.py
Normal file
|
@ -0,0 +1,114 @@
|
|||
import pytest
|
||||
from elasticsearch_dsl.query import Bool, Match, Term
|
||||
from graphene import Schema
|
||||
|
||||
from graphene_django.elasticsearch.tests.commons import filter_generation, generate_query
|
||||
from graphene_django.elasticsearch.tests.filters import ESFilterQuery
|
||||
from graphene_django.utils import DJANGO_FILTER_INSTALLED, DJANGO_ELASTICSEARCH_DSL_INSTALLED
|
||||
|
||||
pytestmark = []
|
||||
|
||||
if not DJANGO_FILTER_INSTALLED or not DJANGO_ELASTICSEARCH_DSL_INSTALLED:
|
||||
pytestmark.append(
|
||||
pytest.mark.skipif(
|
||||
True, reason="django_filters not installed or not compatible"
|
||||
)
|
||||
)
|
||||
|
||||
pytestmark.append(pytest.mark.django_db)
|
||||
|
||||
|
||||
def test_filter_string():
|
||||
filter_generation(
|
||||
"articlesAsField",
|
||||
"headline: \"A text\"",
|
||||
Bool(must=[Match(headline={'query': 'A text', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_string_date():
|
||||
filter_generation(
|
||||
"articlesAsField",
|
||||
"headline: \"A text\"",
|
||||
Bool(must=[Match(headline={'query': 'A text', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_as_field_order_by():
|
||||
filter_generation(
|
||||
"articlesAsField",
|
||||
"headline: \"A text\", sort:{order:desc, field:id}",
|
||||
{'id': {'order': 'desc'}},
|
||||
"sort"
|
||||
)
|
||||
|
||||
|
||||
def test_filter_as_field_order_by_dict():
|
||||
filter_generation(
|
||||
"articlesInMeta",
|
||||
"headline: \"A text\", sort:{order:desc, field:id}",
|
||||
{'es_id': {'order': 'desc'}},
|
||||
"sort"
|
||||
)
|
||||
|
||||
|
||||
def test_filter_in_meta():
|
||||
filter_generation(
|
||||
"articlesInMeta",
|
||||
"headline: \"A text\"",
|
||||
Bool(must=[Match(headline={'query': 'A text', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_in_meta_dict():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headline: \"A text\"",
|
||||
Bool(must=[Match(headline={'query': 'A text', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_in_meta_dict_foreign():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"reporterEmail: \"A mail\"",
|
||||
Bool(must=[Match(reporter__email={'query': 'A mail', 'fuzziness': 'auto'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_in_multi_field():
|
||||
filter_generation(
|
||||
"articlesInMultiField",
|
||||
"contain: \"A text\"",
|
||||
Bool(must=[Bool(should=[
|
||||
Match(headline={'query': 'A text', 'fuzziness': 'auto'}),
|
||||
Match(lang={'query': 'A text', 'fuzziness': 'auto'})
|
||||
])]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_generating_all():
|
||||
filter_generation(
|
||||
"articlesInGenerateAll",
|
||||
"headline: \"A text\", "
|
||||
"pubDate: \"0000-00-00\", "
|
||||
"pubDateTime: \"00:00:00\", "
|
||||
"lang: \"es\", "
|
||||
"importance: 1, ",
|
||||
Bool(must=[
|
||||
Match(headline={'query': 'A text', 'fuzziness': 'auto'}),
|
||||
Match(pub_date={'query': '0000-00-00', 'fuzziness': 'auto'}),
|
||||
Match(pub_date_time={'query': '00:00:00', 'fuzziness': 'auto'}),
|
||||
Match(lang={'query': 'es', 'fuzziness': 'auto'}),
|
||||
Term(importance=1)
|
||||
]),
|
||||
)
|
||||
|
||||
|
||||
def test_filter_generating_exclude():
|
||||
query = generate_query("articlesInExcludes", "headline: \"A text\", ")
|
||||
|
||||
schema = Schema(query=ESFilterQuery)
|
||||
result = schema.execute(query)
|
||||
|
||||
assert len(result.errors) > 0
|
80
graphene_django/elasticsearch/tests/test_filter_processor.py
Normal file
80
graphene_django/elasticsearch/tests/test_filter_processor.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
import pytest
|
||||
from elasticsearch_dsl.query import Bool, Term, Wildcard, MatchPhrase, MatchPhrasePrefix, Range, Terms, Exists
|
||||
|
||||
from graphene_django.elasticsearch.tests.commons import filter_generation
|
||||
from graphene_django.utils import DJANGO_FILTER_INSTALLED, DJANGO_ELASTICSEARCH_DSL_INSTALLED
|
||||
|
||||
pytestmark = []
|
||||
|
||||
if not DJANGO_FILTER_INSTALLED or not DJANGO_ELASTICSEARCH_DSL_INSTALLED:
|
||||
pytestmark.append(
|
||||
pytest.mark.skipif(
|
||||
True, reason="django_filters not installed or not compatible"
|
||||
)
|
||||
)
|
||||
|
||||
pytestmark.append(pytest.mark.django_db)
|
||||
|
||||
|
||||
def test_processor_term():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineTerm: \"A text\"",
|
||||
Bool(must=[Term(headline='A text')]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_regex():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineRegex: \"A text\"",
|
||||
Bool(must=[Wildcard(headline='A text')]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_phrase():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlinePhrase: \"A text\"",
|
||||
Bool(must=[MatchPhrase(headline={'query': 'A text'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_prefix():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlinePrefix: \"A text\"",
|
||||
Bool(must=[MatchPhrasePrefix(headline={'query': 'A text'})]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_in():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineIn: [\"A text 1\", \"A text 2\"]",
|
||||
Bool(must=[Terms(headline=['A text 1', 'A text 2'])]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_exits():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineExits: true",
|
||||
Bool(must=[Bool(must=[Exists(field='headline')])]),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_lte():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineLte: \"A text\"",
|
||||
Bool(must=Range(headline={'lte': 'A text'})),
|
||||
)
|
||||
|
||||
|
||||
def test_processor_gte():
|
||||
filter_generation(
|
||||
"articlesInMetaDict",
|
||||
"headlineGte: \"A text\"",
|
||||
Bool(must=Range(headline={'gte': 'A text'})),
|
||||
)
|
Loading…
Reference in New Issue
Block a user