first commit
This commit is contained in:
88
tests/test_generate_abs_mock_report.py
Normal file
88
tests/test_generate_abs_mock_report.py
Normal file
@@ -0,0 +1,88 @@
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
import generate_abs_mock_report as report
|
||||
|
||||
|
||||
class InferBookTests(unittest.TestCase):
|
||||
def infer_row(self, relative_book_path: str, filenames: list[str]) -> dict[str, str]:
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
library_root = Path(tmpdir) / "library"
|
||||
book_root = library_root / relative_book_path
|
||||
book_root.mkdir(parents=True)
|
||||
|
||||
for filename in filenames:
|
||||
(book_root / filename).write_bytes(b"")
|
||||
|
||||
audio_files = sorted(book_root.glob("*.mp3"))
|
||||
return report.infer_book(book_root, library_root, audio_files)
|
||||
|
||||
def test_splits_author_from_title_context_in_folder_name(self) -> None:
|
||||
row = self.infer_row(
|
||||
"Biblioteka 2024/Bartos_Jolanta_Krzyk_Ciszy",
|
||||
["001_Krzyk_ciszy.mp3", "002_Krzyk_ciszy.mp3"],
|
||||
)
|
||||
|
||||
self.assertEqual(report.signature(row["title"]), "krzyk ciszy")
|
||||
self.assertNotIn("krzyk", report.signature(row["author"]))
|
||||
self.assertTrue(row["proposed_abs_path"].endswith("/Krzyk Ciszy"))
|
||||
|
||||
def test_normalizes_author_order_from_current_directory(self) -> None:
|
||||
row = self.infer_row(
|
||||
"Ahnhem Stefan/Stefan Ahnhem - Kain I Abel",
|
||||
["001_Kain_I_Abel.mp3"],
|
||||
)
|
||||
|
||||
self.assertEqual(row["author"], "Stefan Ahnhem")
|
||||
self.assertTrue(row["proposed_abs_path"].startswith("Stefan Ahnhem/"))
|
||||
|
||||
def test_normalizes_author_order_from_audio_filename(self) -> None:
|
||||
row = self.infer_row(
|
||||
"Archer_Jeffrey/Kain_I_Abel",
|
||||
[
|
||||
"001_Jeffrey_Archer_-_Kain_I_Abel.mp3",
|
||||
"002_Jeffrey_Archer_-_Kain_I_Abel.mp3",
|
||||
],
|
||||
)
|
||||
|
||||
self.assertEqual(row["author"], "Jeffrey Archer")
|
||||
self.assertTrue(row["proposed_abs_path"].startswith("Jeffrey Archer/"))
|
||||
|
||||
def test_handles_hyphenated_surname_in_mixed_folder_name(self) -> None:
|
||||
row = self.infer_row(
|
||||
"Adler-Olsen/Jussi Adler-Olsen - Departament Q tom 1-8/Adler-Olsen Jussi - Departament Q 04. Kartoteka 64",
|
||||
["01 - Kartoteka_64.mp3"],
|
||||
)
|
||||
|
||||
self.assertEqual(row["author"], "Jussi Adler-Olsen")
|
||||
self.assertEqual(row["series"], "Departament Q")
|
||||
self.assertEqual(row["sequence"], "04")
|
||||
self.assertEqual(row["title"], "Kartoteka 64")
|
||||
self.assertTrue(row["proposed_abs_path"].startswith("Jussi Adler-Olsen/"))
|
||||
|
||||
def test_extracts_series_from_nested_mixed_folder(self) -> None:
|
||||
row = self.infer_row(
|
||||
"Adler-Olsen/Jussi Adler-Olsen - Departament Q tom 1-8/Adler-Olsen Jussi - Departament Q Tom 01 Kobieta w klatce/Adler - Olsen Jussi - Kobieta w klatce (czyta Janusz Zadura)",
|
||||
["01.mp3"],
|
||||
)
|
||||
|
||||
self.assertEqual(row["author"], "Jussi Adler-Olsen")
|
||||
self.assertEqual(row["series"], "Departament Q")
|
||||
self.assertEqual(row["sequence"], "01")
|
||||
self.assertEqual(row["title"], "Kobieta w klatce")
|
||||
|
||||
def test_extracts_series_from_inline_series_number_title(self) -> None:
|
||||
row = self.infer_row(
|
||||
"Adler-Olsen/Jussi Adler-Olsen - Departament Q tom 1-8/Adler-Olsen Jussi - Departament Q 05 Pogrzebany",
|
||||
["01.mp3"],
|
||||
)
|
||||
|
||||
self.assertEqual(row["author"], "Jussi Adler-Olsen")
|
||||
self.assertEqual(row["series"], "Departament Q")
|
||||
self.assertEqual(row["sequence"], "05")
|
||||
self.assertEqual(row["title"], "Pogrzebany")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user