import pytest
from conftest import DB, Response
from hircine.db.models import Namespace
@pytest.fixture
def query_comic_sort(execute_sort):
query = """
query comics($sort: ComicSortInput) {
comics(sort: $sort) {
__typename
count
edges {
id
title
}
}
}
"""
return execute_sort(query)
@pytest.fixture
def query_namespace_sort(execute_sort):
query = """
query namespaces($sort: NamespaceSortInput) {
namespaces(sort: $sort) {
__typename
count
edges {
id
name
}
}
}
"""
return execute_sort(query)
@pytest.mark.parametrize(
"sort,reverse",
[
({"on": "DATE"}, False),
({"on": "DATE", "direction": "DESCENDING"}, True),
({"on": "DATE", "direction": "ASCENDING"}, False),
],
ids=[
"ascending (default)",
"descending",
"ascending",
],
)
@pytest.mark.anyio
async def test_query_comics_sort_date(gen_comic, query_comic_sort, sort, reverse):
comics = await DB.add_all(*gen_comic)
ids = [c.id for c in sorted(comics, key=lambda c: c.date, reverse=reverse)]
response = Response(await query_comic_sort(sort))
response.assert_is("ComicFilterResult")
assert ids == [edge["id"] for edge in response.edges]
@pytest.mark.parametrize(
"sort,reverse",
[
({"on": "TAG_COUNT"}, False),
({"on": "TAG_COUNT", "direction": "DESCENDING"}, True),
({"on": "TAG_COUNT", "direction": "ASCENDING"}, False),
],
ids=[
"ascending (default)",
"descending",
"ascending",
],
)
@pytest.mark.anyio
async def test_query_comics_sort_tag_count(gen_comic, query_comic_sort, sort, reverse):
comics = await DB.add_all(*gen_comic)
ids = [c.id for c in sorted(comics, key=lambda c: len(c.tags), reverse=reverse)]
response = Response(await query_comic_sort(sort))
response.assert_is("ComicFilterResult")
assert ids == [edge["id"] for edge in response.edges]
@pytest.mark.anyio
async def test_query_comics_sort_random(gen_comic, query_comic_sort):
comics = await DB.add_all(*gen_comic)
ids = set([c.id for c in comics])
response = Response(await query_comic_sort({"on": "RANDOM"}))
response.assert_is("ComicFilterResult")
assert ids == set(edge["id"] for edge in response.edges)
@pytest.mark.anyio
async def test_query_comics_sort_random_seed_direction(gen_comic, query_comic_sort):
comics = await DB.add_all(*gen_comic)
ids = set([c.id for c in comics])
response = Response(
await query_comic_sort(
{"on": "RANDOM", "seed": 42069, "direction": "ASCENDING"}
)
)
response.assert_is("ComicFilterResult")
ascending_ids = [edge["id"] for edge in response.edges]
assert ids == set(ascending_ids)
response = Response(
await query_comic_sort(
{"on": "RANDOM", "seed": 42069, "direction": "DESCENDING"}
)
)
response.assert_is("ComicFilterResult")
descending_ids = [edge["id"] for edge in response.edges]
assert ascending_ids == descending_ids[::-1]
@pytest.mark.anyio
async def test_query_namespace_sort_sort_name(query_namespace_sort):
await DB.add(Namespace(name="one", sort_name="2"))
await DB.add(Namespace(name="two", sort_name="1"))
response = Response(await query_namespace_sort({"on": "SORT_NAME"}))
response.assert_is("NamespaceFilterResult")
assert [edge["name"] for edge in response.edges] == ["two", "one"]