Added tests for media downloader module
This commit is contained in:
parent
a8b47f2d49
commit
cfb241efb2
2 changed files with 39 additions and 2 deletions
|
|
@ -37,7 +37,6 @@ defmodule Pinchflat.Downloading.MediaDownloader do
|
||||||
{:ok, parsed_json} ->
|
{:ok, parsed_json} ->
|
||||||
update_media_item_from_parsed_json(media_with_preloads, parsed_json)
|
update_media_item_from_parsed_json(media_with_preloads, parsed_json)
|
||||||
|
|
||||||
# TODO: test
|
|
||||||
{:error, :unsuitable_for_download} ->
|
{:error, :unsuitable_for_download} ->
|
||||||
Logger.warning(
|
Logger.warning(
|
||||||
"Media item ##{media_with_preloads.id} isn't suitable for download yet. May be an active or processing live stream"
|
"Media item ##{media_with_preloads.id} isn't suitable for download yet. May be an active or processing live stream"
|
||||||
|
|
@ -116,7 +115,6 @@ defmodule Pinchflat.Downloading.MediaDownloader do
|
||||||
{:ok, options} = DownloadOptionBuilder.build(item_with_preloads, override_opts)
|
{:ok, options} = DownloadOptionBuilder.build(item_with_preloads, override_opts)
|
||||||
runner_opts = [output_filepath: output_filepath, use_cookies: item_with_preloads.source.use_cookies]
|
runner_opts = [output_filepath: output_filepath, use_cookies: item_with_preloads.source.use_cookies]
|
||||||
|
|
||||||
# TODO: test
|
|
||||||
case YtDlpMedia.get_downloadable_status(url) do
|
case YtDlpMedia.get_downloadable_status(url) do
|
||||||
{:ok, :downloadable} -> YtDlpMedia.download(url, options, runner_opts)
|
{:ok, :downloadable} -> YtDlpMedia.download(url, options, runner_opts)
|
||||||
{:ok, :ignorable} -> {:error, :unsuitable_for_download}
|
{:ok, :ignorable} -> {:error, :unsuitable_for_download}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ defmodule Pinchflat.Downloading.MediaDownloaderTest do
|
||||||
)
|
)
|
||||||
|
|
||||||
stub(HTTPClientMock, :get, fn _url, _headers, _opts -> {:ok, ""} end)
|
stub(HTTPClientMock, :get, fn _url, _headers, _opts -> {:ok, ""} end)
|
||||||
|
stub(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, "{}"} end)
|
||||||
stub(YtDlpRunnerMock, :run, fn _url, _opts, _ot, _addl_args -> {:ok, ""} end)
|
stub(YtDlpRunnerMock, :run, fn _url, _opts, _ot, _addl_args -> {:ok, ""} end)
|
||||||
|
|
||||||
{:ok, %{media_item: media_item}}
|
{:ok, %{media_item: media_item}}
|
||||||
|
|
@ -49,6 +50,14 @@ defmodule Pinchflat.Downloading.MediaDownloaderTest do
|
||||||
assert updated_media_item.metadata.thumbnail_filepath =~ "media_items/#{media_item.id}/thumbnail.jpg"
|
assert updated_media_item.metadata.thumbnail_filepath =~ "media_items/#{media_item.id}/thumbnail.jpg"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "errors for non-downloadable media are passed through", %{media_item: media_item} do
|
||||||
|
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
|
||||||
|
{:ok, Phoenix.json_library().encode!(%{"live_status" => "is_live"})}
|
||||||
|
end)
|
||||||
|
|
||||||
|
assert {:error, :unsuitable_for_download} = MediaDownloader.download_for_media_item(media_item)
|
||||||
|
end
|
||||||
|
|
||||||
test "non-recoverable errors are passed through", %{media_item: media_item} do
|
test "non-recoverable errors are passed through", %{media_item: media_item} do
|
||||||
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot, _addl ->
|
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot, _addl ->
|
||||||
{:error, :some_error, 1}
|
{:error, :some_error, 1}
|
||||||
|
|
@ -67,6 +76,36 @@ defmodule Pinchflat.Downloading.MediaDownloaderTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "download_for_media_item/3 when testing non-downloadable media" do
|
||||||
|
test "calls the download runner if the media is currently downloadable", %{media_item: media_item} do
|
||||||
|
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
|
||||||
|
{:ok, Phoenix.json_library().encode!(%{"live_status" => "was_live"})}
|
||||||
|
end)
|
||||||
|
|
||||||
|
expect(YtDlpRunnerMock, :run, 2, fn _url, _opts, _ot, _addl ->
|
||||||
|
{:ok, render_metadata(:media_metadata)}
|
||||||
|
end)
|
||||||
|
|
||||||
|
assert {:ok, _} = MediaDownloader.download_for_media_item(media_item)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "does not call the download runner if the media is not downloadable", %{media_item: media_item} do
|
||||||
|
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
|
||||||
|
{:ok, Phoenix.json_library().encode!(%{"live_status" => "is_live"})}
|
||||||
|
end)
|
||||||
|
|
||||||
|
expect(YtDlpRunnerMock, :run, 0, fn _url, _opts, _ot, _addl -> {:ok, ""} end)
|
||||||
|
|
||||||
|
assert {:error, :unsuitable_for_download} = MediaDownloader.download_for_media_item(media_item)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns unexpected errors from the download status determination method", %{media_item: media_item} do
|
||||||
|
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:error, :what_tha} end)
|
||||||
|
|
||||||
|
assert {:error, "Unknown error: {:error, :what_tha}"} = MediaDownloader.download_for_media_item(media_item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "download_for_media_item/3 when testing override options" do
|
describe "download_for_media_item/3 when testing override options" do
|
||||||
test "includes override opts if specified", %{media_item: media_item} do
|
test "includes override opts if specified", %{media_item: media_item} do
|
||||||
expect(YtDlpRunnerMock, :run, 1, fn _url, opts, _ot, _addl ->
|
expect(YtDlpRunnerMock, :run, 1, fn _url, opts, _ot, _addl ->
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue