Files
aiData/DouYin/dy-downloader/tests/test_video_downloader.py
HuangHai d89388ab51 'commit'
2026-01-20 14:05:19 +08:00

82 lines
2.2 KiB
Python

import pytest
from auth import CookieManager
from config import ConfigLoader
from control import QueueManager, RateLimiter, RetryHandler
from core.api_client import DouyinAPIClient
from core.video_downloader import VideoDownloader
from storage import FileManager
def _build_downloader(tmp_path):
config = ConfigLoader()
config.update(path=str(tmp_path))
file_manager = FileManager(str(tmp_path))
cookie_manager = CookieManager(str(tmp_path / '.cookies.json'))
api_client = DouyinAPIClient({})
downloader = VideoDownloader(
config,
api_client,
file_manager,
cookie_manager,
database=None,
rate_limiter=RateLimiter(max_per_second=5),
retry_handler=RetryHandler(max_retries=1),
queue_manager=QueueManager(max_workers=1),
)
return downloader, api_client
@pytest.mark.asyncio
async def test_video_downloader_skip_counts_total(tmp_path, monkeypatch):
downloader, api_client = _build_downloader(tmp_path)
async def _fake_should_download(self, _):
return False
downloader._should_download = _fake_should_download.__get__(downloader, VideoDownloader)
result = await downloader.download({'aweme_id': '123'})
assert result.total == 1
assert result.skipped == 1
assert result.success == 0
assert result.failed == 0
await api_client.close()
@pytest.mark.asyncio
async def test_build_no_watermark_url_signs_with_headers(tmp_path, monkeypatch):
downloader, api_client = _build_downloader(tmp_path)
signed_url = 'https://www.douyin.com/aweme/v1/play/?video_id=1&X-Bogus=signed'
def _fake_sign(url: str):
return signed_url, 'UnitTestAgent/1.0'
monkeypatch.setattr(api_client, 'sign_url', _fake_sign)
aweme = {
'aweme_id': '1',
'video': {
'play_addr': {
'url_list': [
'https://www.douyin.com/aweme/v1/play/?video_id=1&watermark=0'
]
}
},
}
url, headers = downloader._build_no_watermark_url(aweme)
assert url == signed_url
assert headers['User-Agent'] == 'UnitTestAgent/1.0'
assert headers['Accept'] == '*/*'
assert headers['Referer'].startswith('https://www.douyin.com')
await api_client.close()