82 lines
2.2 KiB
Python
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()
|