diff options
author | Wolfgang Müller | 2024-11-15 13:39:54 +0100 |
---|---|---|
committer | Wolfgang Müller | 2024-11-15 13:39:54 +0100 |
commit | 3b62b56c706622b7361e267d92f0408a29bee812 (patch) | |
tree | b40ffb637a747aeb9ce8b8c8992511f0380a1584 /tests | |
parent | 105850a66e961fa9f8f521ab65d49f3860ff6cd3 (diff) | |
download | hircine-3b62b56c706622b7361e267d92f0408a29bee812.tar.gz |
backend/tests: Add tests for the E-Hentai API
Diffstat (limited to 'tests')
-rw-r--r-- | tests/plugins/scrapers/test_ehentai_api.py | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/tests/plugins/scrapers/test_ehentai_api.py b/tests/plugins/scrapers/test_ehentai_api.py new file mode 100644 index 0000000..dd283e1 --- /dev/null +++ b/tests/plugins/scrapers/test_ehentai_api.py @@ -0,0 +1,140 @@ +from datetime import date + +import pytest + +import hircine.enums as enums +import hircine.plugins.scrapers.ehentai_api as ehentai_api +from hircine.scraper import ScrapeError +from hircine.scraper.types import ( + URL, + Artist, + Censorship, + Circle, + Date, + Language, + OriginalTitle, + Rating, + Tag, + Title, + World, +) + + +def test_does_scrape(requests_mock, gen_comic): + comic = next(gen_comic) + comic.url = "https://exhentai.org/g/1025913/fdaabef1a2" + + scraper = ehentai_api.EHentaiAPIScraper(comic) + + requests_mock.post( + ehentai_api.API_URL, + text=""" + { + "gmetadata": [ + { + "gid": 1025913, + "token": "fdaabef1a2", + "title": "(C91) [Animachine (Shimahara)] Iya na Kao Sarenagara Opantsu Misete Moraitai Manga | A manga about girl showing you her panties while making a disgusted face [English] [葛の寺]", + "title_jpn": "(C91) [アニマルマシーン (40原)] 嫌な顔されながらおパンツ見せてもらいたい漫画 [英訳]", + "category": "Non-H", + "thumb": "https://ehgt.org/51/17/5117cde63cc14436c5ad7f2dd06abb52c86aff65-23642001-2866-4047-png_250.jpg", + "uploader": "葛の寺", + "posted": "1486182349", + "filecount": "23", + "filesize": 528093263, + "expunged": false, + "rating": "4.72", + "torrentcount": "1", + "torrents": [ + { + "hash": "30c7124efca83bf0db1b9fd5ab4511da5f28a60b", + "added": "1486121301", + "name": "(C91) [Animachine (Shimahara)] Iya na Kao Sarenagara Opantsu Misete Moraitai Manga A manga about girl showing you her panties while making a disgusted face [English] [葛の寺].zip", + "tsize": "20800", + "fsize": "528093242" + } + ], + "tags": [ + "language:english", + "language:translated", + "parody:iya na kao sare nagara opantsu misete moraitai", + "group:animachine", + "artist:shimahara", + "female:femdom", + "female:schoolgirl uniform", + "other:full color" + ], + "parent_gid": "1025875", + "parent_key": "cfe6adccb8", + "first_gid": "1025646", + "first_key": "098b4a982a" + } + ] + } + """, # noqa: E501 + ) + + assert scraper.is_available + assert scraper.id == 1025913 + assert scraper.token == "fdaabef1a2" + + assert set(scraper.collect()) == set( + [ + Artist(name="shimahara"), + Censorship(value=enums.Censorship.NONE), + Circle(name="animachine"), + Date(value=date(2017, 2, 4)), + Language(value=enums.Language.EN), + OriginalTitle(value="嫌な顔されながらおパンツ見せてもらいたい漫画"), + Rating(value=enums.Rating.QUESTIONABLE), + Tag(namespace="female", tag="femdom"), + Tag(namespace="female", tag="schoolgirl uniform"), + Tag(namespace="other", tag="full color"), + Title( + value="A manga about girl showing you her panties while making a disgusted face" # noqa: E501 + ), + URL("https://exhentai.org/g/1025913/fdaabef1a2"), + World(name="iya na kao sare nagara opantsu misete moraitai"), + ] + ) + + +def test_is_not_available_with_wrong_url(gen_comic): + comic = next(gen_comic) + comic.url = "https://example.com" + + scraper = ehentai_api.EHentaiAPIScraper(comic) + + assert not scraper.is_available + + +def test_raises_scrape_error_with_invalid_json(requests_mock, gen_comic): + comic = next(gen_comic) + comic.url = "https://exhentai.org/g/1025913/fdaabef1a2" + + scraper = ehentai_api.EHentaiAPIScraper(comic) + + requests_mock.post(ehentai_api.API_URL, text="{") + + assert scraper.is_available + assert scraper.id == 1025913 + assert scraper.token == "fdaabef1a2" + + with pytest.raises(ScrapeError, match="Could not parse JSON response"): + assert set(scraper.collect()) == set() + + +def test_raises_scrape_error_with_error_code(requests_mock, gen_comic): + comic = next(gen_comic) + comic.url = "https://exhentai.org/g/1025913/fdaabef1a2" + + scraper = ehentai_api.EHentaiAPIScraper(comic) + + requests_mock.post(ehentai_api.API_URL, status_code=500) + + assert scraper.is_available + assert scraper.id == 1025913 + assert scraper.token == "fdaabef1a2" + + with pytest.raises(ScrapeError, match="Request failed with status code 500"): + assert set(scraper.collect()) == set() |