import pytest from openlobby.core.api.paginator import Paginator, encode_cursor from openlobby.core.models import ReportSort from openlobby.core.search import search_reports from .dummy import prepare_reports pytestmark = [pytest.mark.django_db, pytest.mark.usefixtures("django_es")] @pytest.mark.parametrize( "query, expected_ids", [("", [3, 2, 1]), ("sauron", [3, 2]), ("towers", [2]), ("Aragorn Gandalf", [3, 1])], ) def test_search_reports__query(query, expected_ids): prepare_reports() paginator = Paginator() response = search_reports(paginator, query=query) assert expected_ids == [int(r.meta.id) for r in response] def test_search_reports__highlight(): prepare_reports() paginator = Paginator() query = "King" 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] @pytest.mark.parametrize( "first, after, expected_ids", [(2, None, [3, 2]), (2, encode_cursor(1), [2, 1])] ) def test_search_reports__pagination(first, after, expected_ids): prepare_reports() paginator = Paginator(first=first, after=after) response = search_reports(paginator) assert expected_ids == [int(r.meta.id) for r in response] def test_search_reports__by_author(): prepare_reports() author_id = 1 paginator = 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_search_reports__by_author__pagination(first, after, expected_ids): prepare_reports() author_id = 1 paginator = Paginator(first=first, after=after) response = search_reports(paginator, author_id=author_id) assert expected_ids == [int(r.meta.id) for r in response] def test_search_reports__sort__default(): prepare_reports() paginator = Paginator() response = search_reports(paginator) assert [3, 2, 1] == [int(r.meta.id) for r in response] @pytest.mark.parametrize( "query, sort, reversed, expected_ids", [ (None, ReportSort.PUBLISHED, False, [3, 2, 1]), (None, ReportSort.PUBLISHED, True, [1, 2, 3]), (None, ReportSort.DATE, False, [2, 3, 1]), (None, ReportSort.DATE, True, [1, 3, 2]), (None, ReportSort.RELEVANCE, False, [3, 2, 1]), (None, ReportSort.RELEVANCE, True, [3, 2, 1]), ("ring", ReportSort.RELEVANCE, False, [1, 3]), ("ring", ReportSort.RELEVANCE, True, [3, 1]), ], ) def test_search_reports__sort(query, sort, reversed, expected_ids): prepare_reports() paginator = Paginator() response = search_reports(paginator, query=query, sort=sort, reversed=reversed) assert expected_ids == [int(r.meta.id) for r in response]