test(downloads): cover preferred naming hint propagation in get_or_download
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Any, cast
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -14,9 +15,14 @@ def _bare_manager(tmp_path: Path) -> DownloadManager:
|
||||
manager = DownloadManager.__new__(DownloadManager)
|
||||
manager.cache_dir = tmp_path
|
||||
manager.chunk_size = 1024
|
||||
manager.auth = type(
|
||||
"Auth", (), {"adp_token": "x", "locale": type("Loc", (), {"domain": "fr"})()}
|
||||
)()
|
||||
manager.auth = cast(
|
||||
Any,
|
||||
type(
|
||||
"Auth",
|
||||
(),
|
||||
{"adp_token": "x", "locale": type("Loc", (), {"domain": "fr"})()},
|
||||
)(),
|
||||
)
|
||||
return manager
|
||||
|
||||
|
||||
@@ -48,8 +54,12 @@ def test_get_or_download_uses_cached_file_when_available(
|
||||
) -> None:
|
||||
"""Ensure cached files bypass link generation and download work."""
|
||||
manager = _bare_manager(tmp_path)
|
||||
monkeypatch.setattr(manager, "_get_name_from_asin", lambda asin: "Book")
|
||||
cached_path = tmp_path / "Book.aax"
|
||||
monkeypatch.setattr(
|
||||
manager,
|
||||
"_get_filename_stems_from_asin",
|
||||
lambda asin, preferred_title=None, preferred_author=None: ["Author_Book"],
|
||||
)
|
||||
cached_path = tmp_path / "Author_Book.aax"
|
||||
cached_path.write_bytes(b"1" * MIN_FILE_SIZE)
|
||||
messages: list[str] = []
|
||||
assert manager.get_or_download("ASIN", notify=messages.append) == cached_path
|
||||
@@ -61,7 +71,11 @@ def test_get_or_download_reports_invalid_url(
|
||||
) -> None:
|
||||
"""Ensure workflow reports invalid download URLs and aborts."""
|
||||
manager = _bare_manager(tmp_path)
|
||||
monkeypatch.setattr(manager, "_get_name_from_asin", lambda asin: "Book")
|
||||
monkeypatch.setattr(
|
||||
manager,
|
||||
"_get_filename_stems_from_asin",
|
||||
lambda asin, preferred_title=None, preferred_author=None: ["Author_Book"],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
manager, "_get_download_link", lambda asin, notify=None: "ftp://bad"
|
||||
)
|
||||
@@ -75,7 +89,11 @@ def test_get_or_download_handles_download_failure(
|
||||
) -> None:
|
||||
"""Ensure workflow reports failures when stream download does not complete."""
|
||||
manager = _bare_manager(tmp_path)
|
||||
monkeypatch.setattr(manager, "_get_name_from_asin", lambda asin: "Book")
|
||||
monkeypatch.setattr(
|
||||
manager,
|
||||
"_get_filename_stems_from_asin",
|
||||
lambda asin, preferred_title=None, preferred_author=None: ["Author_Book"],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
manager, "_get_download_link", lambda asin, notify=None: "https://ok"
|
||||
)
|
||||
@@ -83,3 +101,30 @@ def test_get_or_download_handles_download_failure(
|
||||
messages: list[str] = []
|
||||
assert manager.get_or_download("ASIN", notify=messages.append) is None
|
||||
assert "Download failed" in messages
|
||||
|
||||
|
||||
def test_get_or_download_uses_preferred_naming_hints(
|
||||
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
"""Ensure preferred title/author are forwarded to filename stem selection."""
|
||||
manager = _bare_manager(tmp_path)
|
||||
captured: list[tuple[str | None, str | None]] = []
|
||||
|
||||
def stems(
|
||||
asin: str,
|
||||
preferred_title: str | None = None,
|
||||
preferred_author: str | None = None,
|
||||
) -> list[str]:
|
||||
"""Capture naming hints and return one deterministic filename stem."""
|
||||
del asin
|
||||
captured.append((preferred_title, preferred_author))
|
||||
return ["Author_Book"]
|
||||
|
||||
monkeypatch.setattr(manager, "_get_filename_stems_from_asin", stems)
|
||||
monkeypatch.setattr(manager, "_get_download_link", lambda asin, notify=None: None)
|
||||
manager.get_or_download(
|
||||
"ASIN",
|
||||
preferred_title="11/22/63",
|
||||
preferred_author="Stephen King",
|
||||
)
|
||||
assert captured == [("11/22/63", "Stephen King")]
|
||||
|
||||
Reference in New Issue
Block a user