test for _ffmpeg_downloader
Browse files- pytube/cli.py +1 -4
- tests/test_cli.py +33 -3
pytube/cli.py
CHANGED
|
@@ -267,10 +267,7 @@ def ffmpeg_process(
|
|
| 267 |
|
| 268 |
if resolution == "best":
|
| 269 |
video_stream = (
|
| 270 |
-
youtube.streams.filter(progressive=False)
|
| 271 |
-
.order_by("resolution")
|
| 272 |
-
.desc()
|
| 273 |
-
.first()
|
| 274 |
)
|
| 275 |
else:
|
| 276 |
video_stream = youtube.streams.filter(
|
|
|
|
| 267 |
|
| 268 |
if resolution == "best":
|
| 269 |
video_stream = (
|
| 270 |
+
youtube.streams.filter(progressive=False).order_by("resolution").last()
|
|
|
|
|
|
|
|
|
|
| 271 |
)
|
| 272 |
else:
|
| 273 |
video_stream = youtube.streams.filter(
|
tests/test_cli.py
CHANGED
|
@@ -258,9 +258,7 @@ def test_ffmpeg_process_best_should_download(_ffmpeg_downloader, youtube):
|
|
| 258 |
streams = MagicMock()
|
| 259 |
youtube.streams = streams
|
| 260 |
video_stream = MagicMock()
|
| 261 |
-
streams.filter.return_value.order_by.return_value.
|
| 262 |
-
video_stream
|
| 263 |
-
)
|
| 264 |
audio_stream = MagicMock()
|
| 265 |
streams.get_audio_only.return_value = audio_stream
|
| 266 |
# When
|
|
@@ -307,6 +305,38 @@ def test_ffmpeg_process_res_none_should_not_download(_ffmpeg_downloader, youtube
|
|
| 307 |
_ffmpeg_downloader.assert_not_called()
|
| 308 |
|
| 309 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 310 |
@mock.patch("pytube.cli.YouTube.__init__", return_value=None)
|
| 311 |
def test_download_audio(youtube):
|
| 312 |
parser = argparse.ArgumentParser()
|
|
|
|
| 258 |
streams = MagicMock()
|
| 259 |
youtube.streams = streams
|
| 260 |
video_stream = MagicMock()
|
| 261 |
+
streams.filter.return_value.order_by.return_value.last.return_value = video_stream
|
|
|
|
|
|
|
| 262 |
audio_stream = MagicMock()
|
| 263 |
streams.get_audio_only.return_value = audio_stream
|
| 264 |
# When
|
|
|
|
| 305 |
_ffmpeg_downloader.assert_not_called()
|
| 306 |
|
| 307 |
|
| 308 |
+
@mock.patch("pytube.cli.os.unlink", return_value=None)
|
| 309 |
+
@mock.patch("pytube.cli.subprocess.run", return_value=None)
|
| 310 |
+
@mock.patch("pytube.cli._download", return_value=None)
|
| 311 |
+
@mock.patch("pytube.cli._unique_name", return_value=None)
|
| 312 |
+
def test_ffmpeg_downloader(unique_name, download, run, unlink):
|
| 313 |
+
# Given
|
| 314 |
+
target = "target"
|
| 315 |
+
audio_stream = MagicMock()
|
| 316 |
+
video_stream = MagicMock()
|
| 317 |
+
video_stream.id = "video_id"
|
| 318 |
+
video_stream.subtype = "video_subtype"
|
| 319 |
+
unique_name.side_effect = ["video_name", "audio_name"]
|
| 320 |
+
|
| 321 |
+
# When
|
| 322 |
+
cli._ffmpeg_downloader(
|
| 323 |
+
audio_stream=audio_stream, video_stream=video_stream, target=target
|
| 324 |
+
)
|
| 325 |
+
# Then
|
| 326 |
+
download.assert_called()
|
| 327 |
+
run.assert_called_with([
|
| 328 |
+
"ffmpeg",
|
| 329 |
+
"-i",
|
| 330 |
+
f"target/video_name",
|
| 331 |
+
"-i",
|
| 332 |
+
f"target/audio_name",
|
| 333 |
+
"-codec",
|
| 334 |
+
"copy",
|
| 335 |
+
f"target/safe_title.video_subtype",
|
| 336 |
+
])
|
| 337 |
+
unlink.assert_called()
|
| 338 |
+
|
| 339 |
+
|
| 340 |
@mock.patch("pytube.cli.YouTube.__init__", return_value=None)
|
| 341 |
def test_download_audio(youtube):
|
| 342 |
parser = argparse.ArgumentParser()
|