diff --git a/lib/pinchflat/workers/video_download_worker.ex b/lib/pinchflat/workers/video_download_worker.ex index 830b64d..338cba3 100644 --- a/lib/pinchflat/workers/video_download_worker.ex +++ b/lib/pinchflat/workers/video_download_worker.ex @@ -11,7 +11,9 @@ defmodule Pinchflat.Workers.VideoDownloadWorker do @impl Oban.Worker @doc """ - TODO: test + For a given media item, download the video and save the metadata. + + Returns {:ok, %MediaItem{}} | {:error, any, ...any} """ def perform(%Oban.Job{args: %{"id" => media_item_id}}) do media_item = Media.get_media_item!(media_item_id) diff --git a/test/pinchflat/workers/video_download_worker_test.exs b/test/pinchflat/workers/video_download_worker_test.exs new file mode 100644 index 0000000..3c09820 --- /dev/null +++ b/test/pinchflat/workers/video_download_worker_test.exs @@ -0,0 +1,42 @@ +defmodule Pinchflat.Workers.VideoDownloadWorkerTest do + use Pinchflat.DataCase + + import Mox + import Pinchflat.MediaFixtures + + alias Pinchflat.Workers.VideoDownloadWorker + + setup :verify_on_exit! + + setup do + media_item = + Repo.preload( + media_item_fixture(%{video_filepath: nil}), + [:metadata, channel: :media_profile] + ) + + {:ok, %{media_item: media_item}} + end + + describe "perform/1" do + test "it saves attributes to the media_item", %{media_item: media_item} do + expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> + {:ok, render_metadata(:media_metadata)} + end) + + assert media_item.video_filepath == nil + perform_job(VideoDownloadWorker, %{id: media_item.id}) + assert Repo.reload(media_item).video_filepath != nil + end + + test "it saves the metadata to the media_item", %{media_item: media_item} do + expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> + {:ok, render_metadata(:media_metadata)} + end) + + assert media_item.metadata == nil + perform_job(VideoDownloadWorker, %{id: media_item.id}) + assert Repo.reload(media_item).metadata != nil + end + end +end