mirror of
https://github.com/YusufB5/ASCILINE.git
synced 2026-06-23 22:48:06 +02:00
Rename test_ytdl.py to experiments/test_ytdl.py
This commit is contained in:
parent
c59b0ebc20
commit
8321fc4eb8
1 changed files with 0 additions and 0 deletions
63
experiments/test_ytdl.py
Normal file
63
experiments/test_ytdl.py
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
"""Unit tests for ytdl.expand_playlist parsing (no network — _ytdlp is mocked)."""
|
||||
import json
|
||||
import subprocess
|
||||
from unittest import mock
|
||||
|
||||
import ytdl
|
||||
|
||||
|
||||
def _cp(stdout="", returncode=0, stderr=""):
|
||||
return subprocess.CompletedProcess(args=[], returncode=returncode,
|
||||
stdout=stdout, stderr=stderr)
|
||||
|
||||
|
||||
def test_expand_playlist_returns_each_entry_url():
|
||||
info = {
|
||||
"_type": "playlist",
|
||||
"entries": [
|
||||
{"id": "aaa", "url": "https://www.youtube.com/watch?v=aaa"},
|
||||
{"id": "bbb", "url": "https://www.youtube.com/watch?v=bbb"},
|
||||
],
|
||||
}
|
||||
with mock.patch.object(ytdl, "_ytdlp", return_value=_cp(json.dumps(info))):
|
||||
assert ytdl.expand_playlist("https://youtube.com/playlist?list=PL") == [
|
||||
"https://www.youtube.com/watch?v=aaa",
|
||||
"https://www.youtube.com/watch?v=bbb",
|
||||
]
|
||||
|
||||
|
||||
def test_expand_playlist_builds_url_from_bare_id():
|
||||
# Some yt-dlp versions emit a bare id in 'url' for flat entries.
|
||||
info = {"_type": "playlist", "entries": [{"id": "xyz", "url": "xyz"}]}
|
||||
with mock.patch.object(ytdl, "_ytdlp", return_value=_cp(json.dumps(info))):
|
||||
assert ytdl.expand_playlist("https://youtube.com/playlist?list=PL") == [
|
||||
"https://www.youtube.com/watch?v=xyz",
|
||||
]
|
||||
|
||||
|
||||
def test_expand_playlist_single_video_returns_input_unchanged():
|
||||
info = {"_type": "video", "id": "single"}
|
||||
url = "https://youtu.be/single"
|
||||
with mock.patch.object(ytdl, "_ytdlp", return_value=_cp(json.dumps(info))):
|
||||
assert ytdl.expand_playlist(url) == [url]
|
||||
|
||||
|
||||
def test_expand_playlist_falls_back_on_ytdlp_failure():
|
||||
url = "https://youtu.be/whatever"
|
||||
with mock.patch.object(ytdl, "_ytdlp", return_value=_cp("", returncode=1, stderr="boom")):
|
||||
assert ytdl.expand_playlist(url) == [url]
|
||||
|
||||
|
||||
def test_expand_playlist_falls_back_on_bad_json():
|
||||
url = "https://youtu.be/whatever"
|
||||
with mock.patch.object(ytdl, "_ytdlp", return_value=_cp("not json{")):
|
||||
assert ytdl.expand_playlist(url) == [url]
|
||||
|
||||
|
||||
def test_expand_playlist_skips_unusable_entries():
|
||||
info = {"_type": "playlist", "entries": [{"title": "no id or url"},
|
||||
{"id": "ok"}]}
|
||||
with mock.patch.object(ytdl, "_ytdlp", return_value=_cp(json.dumps(info))):
|
||||
assert ytdl.expand_playlist("https://youtube.com/playlist?list=PL") == [
|
||||
"https://www.youtube.com/watch?v=ok",
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue