import pytest from conftest import DB, Response import hircine.plugins from hircine.db.models import ( Artist, Character, Circle, Page, Tag, World, ) from hircine.scraper import Scraper totals_fragment = """ fragment Totals on Statistics { total { archives artists characters circles comics namespaces scrapers tags worlds images pages comic { artists characters circles tags worlds } } } """ @pytest.fixture def query_statistics(execute): query = """ query statistics { statistics { __typename ... Totals } } """ return execute(totals_fragment + query) @pytest.mark.anyio async def test_statistics_returns_totals( gen_comic, gen_image, query_statistics, empty_plugins ): comic = next(gen_comic) await DB.add(comic) await DB.add(Artist(name="foo")) await DB.add(Character(name="foo")) await DB.add(Circle(name="foo")) await DB.add(World(name="foo")) await DB.add(Tag(name="foo")) image = next(gen_image) await DB.add(image) await DB.add( Page(id=100, index=100, path="100.png", image=image, archive=comic.archive) ) await DB.add( Page(id=101, index=101, path="101.png", image=image, archive=comic.archive) ) namespaces = set() for tag in comic.tags: namespaces.add(tag.namespace.id) class MockScraper(Scraper): name = "Scraper" def scrape(self): yield None hircine.plugins.register_scraper("mock", MockScraper) response = Response(await query_statistics()) response.assert_is("Statistics") assert response.total["comics"] == 1 assert response.total["archives"] == 1 assert response.total["artists"] == len(comic.artists) + 1 assert response.total["characters"] == len(comic.characters) + 1 assert response.total["circles"] == len(comic.circles) + 1 assert response.total["worlds"] == len(comic.worlds) + 1 assert response.total["tags"] == len(comic.tags) + 1 assert response.total["namespaces"] == len(namespaces) assert response.total["images"] == len(comic.pages) + 1 assert response.total["pages"] == len(comic.pages) + 2 assert response.total["scrapers"] == 1 assert response.total["comic"]["artists"] == len(comic.artists) assert response.total["comic"]["characters"] == len(comic.characters) assert response.total["comic"]["circles"] == len(comic.circles) assert response.total["comic"]["tags"] == len(comic.tags) assert response.total["comic"]["worlds"] == len(comic.worlds)