| 1 | import pytest |
| 2 | |
| 3 | from auth import CookieManager |
| 4 | from config import ConfigLoader |
| 5 | from control import QueueManager, RateLimiter, RetryHandler |
| 6 | from core.api_client import DouyinAPIClient |
| 7 | from core.downloader_factory import DownloaderFactory |
| 8 | from core.mix_downloader import MixDownloader |
| 9 | from core.music_downloader import MusicDownloader |
| 10 | from core.user_downloader import UserDownloader |
| 11 | from core.video_downloader import VideoDownloader |
| 12 | from storage import FileManager |
| 13 | |
| 14 | |
| 15 | @pytest.mark.asyncio |
| 16 | async def test_downloader_factory_routes_supported_types(tmp_path): |
| 17 | config = ConfigLoader() |
| 18 | config.update(path=str(tmp_path)) |
| 19 | file_manager = FileManager(str(tmp_path)) |
| 20 | cookie_manager = CookieManager(str(tmp_path / ".cookies.json")) |
| 21 | api_client = DouyinAPIClient({}) |
| 22 | |
| 23 | common = dict( |
| 24 | config=config, |
| 25 | api_client=api_client, |
| 26 | file_manager=file_manager, |
| 27 | cookie_manager=cookie_manager, |
| 28 | database=None, |
| 29 | rate_limiter=RateLimiter(max_per_second=5), |
| 30 | retry_handler=RetryHandler(max_retries=1), |
| 31 | queue_manager=QueueManager(max_workers=1), |
| 32 | ) |
| 33 | |
| 34 | try: |
| 35 | assert isinstance(DownloaderFactory.create("video", **common), VideoDownloader) |
| 36 | assert isinstance(DownloaderFactory.create("gallery", **common), VideoDownloader) |
| 37 | assert isinstance(DownloaderFactory.create("user", **common), UserDownloader) |
| 38 | assert isinstance(DownloaderFactory.create("collection", **common), MixDownloader) |
| 39 | assert isinstance(DownloaderFactory.create("music", **common), MusicDownloader) |
| 40 | finally: |
| 41 | await api_client.close() |
| 42 | |
| 43 | |
| 44 | def test_downloader_factory_returns_none_for_unknown_type(): |
| 45 | result = DownloaderFactory.create( |
| 46 | "unknown", |
| 47 | config=None, |
| 48 | api_client=None, |
| 49 | file_manager=None, |
| 50 | cookie_manager=None, |
| 51 | ) |
| 52 | assert result is None |
| 53 |