返回 douyin-downloader
test_downloader_factory.py
根目录 / tests / test_downloader_factory.py
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
53 lines PYTHON