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
No related branches found
No related tags found
No related merge requests found
......@@ -87,7 +87,7 @@ class Query:
query = kwargs.get("query", "")
query = extract_text(query)
params = {"highlight": kwargs.get("highlight")}
response = search.query_reports(query, paginator, **params)
response = search.search_reports(paginator, query=query, **params)
total = response.hits.total
page_info = paginator.get_page_info(total)
......
......@@ -171,7 +171,7 @@ class Author(graphene.ObjectType):
def resolve_reports(self, info, **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
page_info = paginator.get_page_info(total)
......
......@@ -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 = [
"title",
"body",
......@@ -18,22 +18,20 @@ def query_reports(query, paginator, *, highlight=False):
"other_participants",
]
s = ReportDoc.search()
s = s.exclude("term", is_draft=True)
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)
if highlight:
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[paginator.slice_from : paginator.slice_to]
return s.execute()
import pytest
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
......@@ -13,18 +13,18 @@ pytestmark = [pytest.mark.django_db, pytest.mark.usefixtures("django_es")]
"query, expected_ids",
[("", [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()
paginator = Paginator()
response = query_reports(query, paginator)
response = search_reports(paginator, query=query)
assert expected_ids == [int(r.meta.id) for r in response]
def test_query_reports__highlight():
def test_search_reports__highlight():
prepare_reports()
paginator = Paginator()
query = "King"
response = query_reports(query, paginator, highlight=True)
response = search_reports(paginator, query=query, highlight=True)
doc = response.hits[0]
assert "<mark>King</mark>" in doc.meta.highlight.title[0]
assert "<mark>King</mark>" in doc.meta.highlight.body[0]
......@@ -33,28 +33,28 @@ def test_query_reports__highlight():
@pytest.mark.parametrize(
"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()
query = ""
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]
def test_reports_by_author():
def test_search_reports__by_author():
prepare_reports()
author_id = 1
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]
@pytest.mark.parametrize(
"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()
author_id = 1
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]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment