summaryrefslogtreecommitdiffstatshomepage
path: root/tests/plugins/scrapers
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/plugins/scrapers/test_ehentai_api.py140
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()