Skip to content
Snippets Groups Projects
Commit 90849893 authored by jan.bednarik's avatar jan.bednarik
Browse files

Search of reports into one parametrized function

parent bf76ab7f
Branches
No related tags found
No related merge requests found
...@@ -87,7 +87,7 @@ class Query: ...@@ -87,7 +87,7 @@ class Query:
query = kwargs.get("query", "") query = kwargs.get("query", "")
query = extract_text(query) query = extract_text(query)
params = {"highlight": kwargs.get("highlight")} params = {"highlight": kwargs.get("highlight")}
response = search.query_reports(query, paginator, **params) response = search.search_reports(paginator, query=query, **params)
total = response.hits.total total = response.hits.total
page_info = paginator.get_page_info(total) page_info = paginator.get_page_info(total)
......
...@@ -171,7 +171,7 @@ class Author(graphene.ObjectType): ...@@ -171,7 +171,7 @@ class Author(graphene.ObjectType):
def resolve_reports(self, info, **kwargs): def resolve_reports(self, info, **kwargs):
paginator = Paginator(**kwargs) paginator = Paginator(**kwargs)
response = search.reports_by_author(self.id, paginator) response = search.search_reports(paginator, author_id=self.id)
total = response.hits.total total = response.hits.total
page_info = paginator.get_page_info(total) page_info = paginator.get_page_info(total)
......
...@@ -8,7 +8,7 @@ HIGHLIGHT_PARAMS = { ...@@ -8,7 +8,7 @@ HIGHLIGHT_PARAMS = {
} }
def query_reports(query, paginator, *, highlight=False): def search_reports(paginator, *, query=None, highlight=False, author_id=None):
fields = [ fields = [
"title", "title",
"body", "body",
...@@ -18,22 +18,20 @@ def query_reports(query, paginator, *, highlight=False): ...@@ -18,22 +18,20 @@ def query_reports(query, paginator, *, highlight=False):
"other_participants", "other_participants",
] ]
s = ReportDoc.search() s = ReportDoc.search()
s = s.exclude("term", is_draft=True) s = s.exclude("term", is_draft=True)
s = s.exclude("exists", field="superseded_by_id") s = s.exclude("exists", field="superseded_by_id")
if query != "":
if author_id:
s = s.filter("term", author_id=author_id)
if query:
s = s.query("multi_match", query=query, fields=fields) s = s.query("multi_match", query=query, fields=fields)
if highlight: if highlight:
s = s.highlight(*fields, **HIGHLIGHT_PARAMS) s = s.highlight(*fields, **HIGHLIGHT_PARAMS)
s = s.sort("-published")
s = s[paginator.slice_from : paginator.slice_to]
return s.execute()
def reports_by_author(author_id, paginator):
s = ReportDoc.search()
s = s.exclude("term", is_draft=True)
s = s.exclude("exists", field="superseded_by_id")
s = s.filter("term", author_id=author_id)
s = s.sort("-published") s = s.sort("-published")
s = s[paginator.slice_from : paginator.slice_to] s = s[paginator.slice_from : paginator.slice_to]
return s.execute() return s.execute()
import pytest import pytest
from openlobby.core.api.paginator import Paginator, encode_cursor from openlobby.core.api.paginator import Paginator, encode_cursor
from openlobby.core.search import query_reports, reports_by_author from openlobby.core.search import search_reports
from .dummy import prepare_reports from .dummy import prepare_reports
...@@ -13,18 +13,18 @@ pytestmark = [pytest.mark.django_db, pytest.mark.usefixtures("django_es")] ...@@ -13,18 +13,18 @@ pytestmark = [pytest.mark.django_db, pytest.mark.usefixtures("django_es")]
"query, expected_ids", "query, expected_ids",
[("", [3, 2, 1]), ("sauron", [3, 2]), ("towers", [2]), ("Aragorn Gandalf", [3, 1])], [("", [3, 2, 1]), ("sauron", [3, 2]), ("towers", [2]), ("Aragorn Gandalf", [3, 1])],
) )
def test_query_reports(query, expected_ids): def test_search_reports(query, expected_ids):
prepare_reports() prepare_reports()
paginator = Paginator() paginator = Paginator()
response = query_reports(query, paginator) response = search_reports(paginator, query=query)
assert expected_ids == [int(r.meta.id) for r in response] assert expected_ids == [int(r.meta.id) for r in response]
def test_query_reports__highlight(): def test_search_reports__highlight():
prepare_reports() prepare_reports()
paginator = Paginator() paginator = Paginator()
query = "King" query = "King"
response = query_reports(query, paginator, highlight=True) response = search_reports(paginator, query=query, highlight=True)
doc = response.hits[0] doc = response.hits[0]
assert "<mark>King</mark>" in doc.meta.highlight.title[0] assert "<mark>King</mark>" in doc.meta.highlight.title[0]
assert "<mark>King</mark>" in doc.meta.highlight.body[0] assert "<mark>King</mark>" in doc.meta.highlight.body[0]
...@@ -33,28 +33,28 @@ def test_query_reports__highlight(): ...@@ -33,28 +33,28 @@ def test_query_reports__highlight():
@pytest.mark.parametrize( @pytest.mark.parametrize(
"first, after, expected_ids", [(2, None, [3, 2]), (2, encode_cursor(1), [2, 1])] "first, after, expected_ids", [(2, None, [3, 2]), (2, encode_cursor(1), [2, 1])]
) )
def test_query_reports__pagination(first, after, expected_ids): def test_search_reports__pagination(first, after, expected_ids):
prepare_reports() prepare_reports()
query = "" query = ""
paginator = Paginator(first=first, after=after) paginator = Paginator(first=first, after=after)
response = query_reports(query, paginator) response = search_reports(paginator, query=query)
assert expected_ids == [int(r.meta.id) for r in response] assert expected_ids == [int(r.meta.id) for r in response]
def test_reports_by_author(): def test_search_reports__by_author():
prepare_reports() prepare_reports()
author_id = 1 author_id = 1
paginator = Paginator() paginator = Paginator()
response = reports_by_author(author_id, paginator) response = search_reports(paginator, author_id=author_id)
assert [3, 1] == [int(r.meta.id) for r in response] assert [3, 1] == [int(r.meta.id) for r in response]
@pytest.mark.parametrize( @pytest.mark.parametrize(
"first, after, expected_ids", [(1, None, [3]), (1, encode_cursor(1), [1])] "first, after, expected_ids", [(1, None, [3]), (1, encode_cursor(1), [1])]
) )
def test_reports_by_author__pagination(first, after, expected_ids): def test_search_reports__by_author__pagination(first, after, expected_ids):
prepare_reports() prepare_reports()
author_id = 1 author_id = 1
paginator = Paginator(first=first, after=after) paginator = Paginator(first=first, after=after)
response = reports_by_author(author_id, paginator) response = search_reports(paginator, author_id=author_id)
assert expected_ids == [int(r.meta.id) for r in response] assert expected_ids == [int(r.meta.id) for r in response]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment