From 098ff5424a3e6207e6e7140b5e0848c15d6740d6 Mon Sep 17 00:00:00 2001 From: Wolfgang Müller Date: Fri, 15 Nov 2024 12:52:16 +0100 Subject: backend/tests: Add tests for the anchira scraper --- tests/plugins/scrapers/test_anchira.py | 107 +++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 tests/plugins/scrapers/test_anchira.py (limited to 'tests') diff --git a/tests/plugins/scrapers/test_anchira.py b/tests/plugins/scrapers/test_anchira.py new file mode 100644 index 0000000..0554957 --- /dev/null +++ b/tests/plugins/scrapers/test_anchira.py @@ -0,0 +1,107 @@ +import os +from datetime import date +from zipfile import ZipFile + +import pytest + +import hircine.enums as enums +from hircine.plugins.scrapers.anchira import AnchiraYamlScraper +from hircine.scraper.types import ( + URL, + Artist, + Censorship, + Circle, + Date, + Direction, + Language, + Rating, + Tag, + Title, + World, +) + + +@pytest.fixture +def archive_file(tmpdir): + file = os.path.join(tmpdir, "archive.zip") + + data = """ +--- +Source: https://anchira.to/g/1/1 +URL: https://example.com +Title: Example Title +Artist: +- Example +Circle: +- Example +Parody: +- Original Work +- Example +Magazine: [] +Tags: +- Unlimited +- Book +Released: 1574394240 +Pages: 102 +... + """ + + with ZipFile(file, "x") as ziph: + ziph.writestr("info.yaml", data) + + yield file + + +def test_does_scrape(monkeypatch, archive_file, gen_comic): + comic = next(gen_comic) + comic.archive.path = archive_file + + scraper = AnchiraYamlScraper(comic) + + assert scraper.is_available + assert scraper.source == AnchiraYamlScraper.source + assert scraper.name == "anchira.to info.yaml" + + assert set(scraper.collect()) == set( + [ + Artist(name="Example"), + Circle(name="Example"), + Date(value=date(2019, 11, 22)), + Direction(value=enums.Direction.RIGHT_TO_LEFT), + Language(value=enums.Language.EN), + Tag(namespace="none", tag="Book"), + Title(value="Example Title"), + URL(value="https://example.com"), + World(name="Example"), + ] + ) + + +def test_does_not_scrape_on_error(tmpdir, gen_comic): + comic = next(gen_comic) + comic.archive.path = os.path.join(tmpdir, "nonexistent.zip") + + scraper = AnchiraYamlScraper(comic) + + assert scraper.data == {} + assert not scraper.is_available + + +@pytest.mark.parametrize( + "tag, parsed", + [ + ("Hentai", Rating(value=enums.Rating.EXPLICIT)), + ("Non-H", Rating(value=enums.Rating.QUESTIONABLE)), + ("Ecchi", Rating(value=enums.Rating.QUESTIONABLE)), + ("Uncensored", Censorship(value=enums.Censorship.NONE)), + ], + ids=[ + "hentai", + "non-h", + "ecchi", + "uncensored", + ], +) +def test_parses_tags(tag, parsed): + scraper = AnchiraYamlScraper(None) + assert scraper.parse_tag(tag) == parsed -- cgit v1.2.3-2-gb3c3