2023-02-15 13:50:59 +01:00
|
|
|
import shutil
|
|
|
|
import subprocess
|
2023-02-15 21:53:59 +01:00
|
|
|
import time
|
2023-02-13 23:17:52 +01:00
|
|
|
from pathlib import Path
|
|
|
|
|
2023-02-15 21:53:59 +01:00
|
|
|
import pytest
|
2023-02-15 13:50:59 +01:00
|
|
|
import xmlschema
|
|
|
|
|
2023-02-15 16:00:55 +01:00
|
|
|
from mangadlp.metadata import validate_metadata, write_metadata
|
2023-02-13 23:17:52 +01:00
|
|
|
|
|
|
|
|
2023-02-15 21:53:59 +01:00
|
|
|
@pytest.fixture
|
|
|
|
def wait_20s():
|
|
|
|
print("sleeping 20 seconds because of api timeouts")
|
|
|
|
time.sleep(20)
|
|
|
|
|
|
|
|
|
2023-02-13 23:17:52 +01:00
|
|
|
def test_metadata_creation():
|
|
|
|
test_metadata_file = Path("tests/ComicInfo_test.xml")
|
|
|
|
metadata_path = Path("tests/")
|
|
|
|
metadata_file = Path("tests/ComicInfo.xml")
|
|
|
|
metadata = {
|
2023-02-14 14:15:33 +01:00
|
|
|
"Volume": 1,
|
2023-02-13 23:17:52 +01:00
|
|
|
"Number": "2",
|
2023-02-14 14:15:33 +01:00
|
|
|
"PageCount": 99,
|
|
|
|
"Count": 10,
|
2023-02-13 23:17:52 +01:00
|
|
|
"LanguageISO": "en",
|
|
|
|
"Title": "title1",
|
|
|
|
"Series": "series1",
|
|
|
|
"Summary": "summary1",
|
|
|
|
"Genre": "genre1",
|
|
|
|
"Web": "https://mangadex.org",
|
2023-02-14 13:36:48 +01:00
|
|
|
"Format": "cbz",
|
2023-02-13 23:17:52 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
write_metadata(metadata_path, metadata)
|
|
|
|
assert metadata_file.exists()
|
|
|
|
|
|
|
|
read_in_metadata = metadata_file.read_text(encoding="utf8")
|
|
|
|
test_metadata = test_metadata_file.read_text(encoding="utf8")
|
|
|
|
assert test_metadata == read_in_metadata
|
|
|
|
|
|
|
|
# cleanup
|
|
|
|
metadata_file.unlink()
|
2023-02-15 13:50:59 +01:00
|
|
|
|
|
|
|
|
2023-02-15 16:00:55 +01:00
|
|
|
def test_metadata_validation():
|
|
|
|
metadata = {
|
|
|
|
"Volume": "1", # invalid
|
|
|
|
"Number": "2",
|
|
|
|
"PageCount": "99", # invalid
|
|
|
|
"Count": "10", # invalid
|
|
|
|
"LanguageISO": 1, # invalid
|
|
|
|
"Title": "title1",
|
|
|
|
"Series": "series1",
|
|
|
|
"Summary": "summary1",
|
|
|
|
"Genre": "genre1",
|
|
|
|
"Web": "https://mangadex.org",
|
|
|
|
"Format": "cbz",
|
|
|
|
}
|
|
|
|
|
|
|
|
valid_metadata = validate_metadata(metadata)
|
|
|
|
|
|
|
|
assert valid_metadata["ComicInfo"] == {
|
|
|
|
"Title": "title1",
|
|
|
|
"Series": "series1",
|
|
|
|
"Number": "2",
|
|
|
|
"Summary": "summary1",
|
|
|
|
"Notes": "Downloaded with https://github.com/olofvndrhr/manga-dlp",
|
|
|
|
"Genre": "genre1",
|
|
|
|
"Web": "https://mangadex.org",
|
|
|
|
"Format": "cbz",
|
|
|
|
"Manga": "Yes",
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
def test_metadata_validation_values():
|
|
|
|
metadata = {
|
|
|
|
"BlackAndWhite": "No",
|
|
|
|
"Manga": "YesAndRightToLeft",
|
|
|
|
"AgeRating": "Rating Pending",
|
|
|
|
"CommunityRating": 4,
|
|
|
|
}
|
|
|
|
|
|
|
|
valid_metadata = validate_metadata(metadata)
|
|
|
|
|
|
|
|
assert valid_metadata["ComicInfo"] == {
|
|
|
|
"Notes": "Downloaded with https://github.com/olofvndrhr/manga-dlp",
|
|
|
|
"BlackAndWhite": "No",
|
|
|
|
"Manga": "YesAndRightToLeft",
|
|
|
|
"AgeRating": "Rating Pending",
|
|
|
|
"CommunityRating": 4,
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
def test_metadata_validation_values2():
|
|
|
|
metadata = {
|
|
|
|
"BlackAndWhite": "No",
|
|
|
|
"Manga": "YesAndRightToLeft",
|
2023-02-15 16:02:24 +01:00
|
|
|
"AgeRating": "12+", # invalid
|
|
|
|
"CommunityRating": 10, # invalid
|
2023-02-15 16:00:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
valid_metadata = validate_metadata(metadata)
|
|
|
|
|
|
|
|
assert valid_metadata["ComicInfo"] == {
|
|
|
|
"Notes": "Downloaded with https://github.com/olofvndrhr/manga-dlp",
|
|
|
|
"BlackAndWhite": "No",
|
|
|
|
"Manga": "YesAndRightToLeft",
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-02-15 21:53:59 +01:00
|
|
|
def test_metadata_chapter_validity(wait_20s):
|
2023-02-15 13:50:59 +01:00
|
|
|
url_uuid = "https://mangadex.org/title/76ee7069-23b4-493c-bc44-34ccbf3051a8/tomo-chan-wa-onna-no-ko"
|
|
|
|
manga_path = Path("tests/Tomo-chan wa Onna no ko")
|
2023-02-15 21:53:59 +01:00
|
|
|
metadata_path = manga_path / "Ch. 1 - Once In A Life Time Misfire/ComicInfo.xml"
|
2023-02-15 13:50:59 +01:00
|
|
|
language = "en"
|
|
|
|
chapters = "1"
|
|
|
|
download_path = "tests"
|
|
|
|
command_args = [
|
|
|
|
"-u",
|
|
|
|
url_uuid,
|
|
|
|
"-l",
|
|
|
|
language,
|
|
|
|
"-c",
|
|
|
|
chapters,
|
|
|
|
"--path",
|
|
|
|
download_path,
|
|
|
|
"--format",
|
|
|
|
"",
|
|
|
|
"--debug",
|
|
|
|
]
|
|
|
|
schema = xmlschema.XMLSchema("mangadlp/metadata/ComicInfo_v2.0.xsd")
|
|
|
|
|
|
|
|
script_path = "manga-dlp.py"
|
2023-02-18 12:29:25 +01:00
|
|
|
command = ["python3", script_path, *command_args]
|
2023-02-15 13:50:59 +01:00
|
|
|
|
|
|
|
assert subprocess.call(command) == 0
|
|
|
|
assert metadata_path.is_file()
|
|
|
|
assert schema.is_valid(metadata_path)
|
|
|
|
|
|
|
|
# cleanup
|
|
|
|
shutil.rmtree(manga_path, ignore_errors=True)
|