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()
|