'commit'
This commit is contained in:
81
DouYin/dy-downloader/tests/test_video_downloader.py
Normal file
81
DouYin/dy-downloader/tests/test_video_downloader.py
Normal file
@@ -0,0 +1,81 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user