From 6335f8bbac7104ed298e1caa7a7e66abf7a3b758 Mon Sep 17 00:00:00 2001 From: Kharec Date: Wed, 18 Feb 2026 03:39:09 +0100 Subject: [PATCH] test(downloads): cover preferred naming hint propagation in get_or_download --- .../test_download_manager_workflow.py | 59 ++++++++++++++++--- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/tests/downloads/test_download_manager_workflow.py b/tests/downloads/test_download_manager_workflow.py index cb146c9..0ad30a9 100644 --- a/tests/downloads/test_download_manager_workflow.py +++ b/tests/downloads/test_download_manager_workflow.py @@ -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")]