Docs and tests
This commit is contained in:
parent
dc6d281d47
commit
0523c3c72e
5 changed files with 83 additions and 4 deletions
|
|
@ -21,7 +21,12 @@ defmodule Pinchflat.FastIndexing.FastIndexingHelpers do
|
||||||
|
|
||||||
alias Pinchflat.YtDlp.Media, as: YtDlpMedia
|
alias Pinchflat.YtDlp.Media, as: YtDlpMedia
|
||||||
|
|
||||||
# TODO: test
|
@doc """
|
||||||
|
Kicks off a new fast indexing task for a source. This will delete any existing fast indexing
|
||||||
|
tasks for the source before starting a new one.
|
||||||
|
|
||||||
|
Returns {:ok, %Task{}}
|
||||||
|
"""
|
||||||
def kickoff_indexing_task(%Source{} = source) do
|
def kickoff_indexing_task(%Source{} = source) do
|
||||||
Tasks.delete_pending_tasks_for(source, "FastIndexingWorker", include_executing: true)
|
Tasks.delete_pending_tasks_for(source, "FastIndexingWorker", include_executing: true)
|
||||||
FastIndexingWorker.kickoff_with_task(source)
|
FastIndexingWorker.kickoff_with_task(source)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ defmodule Pinchflat.SlowIndexing.SlowIndexingHelpers do
|
||||||
Starts tasks for indexing a source's media regardless of the source's indexing
|
Starts tasks for indexing a source's media regardless of the source's indexing
|
||||||
frequency. It's assumed the caller will check for indexing frequency.
|
frequency. It's assumed the caller will check for indexing frequency.
|
||||||
|
|
||||||
Returns {:ok, %Task{}}.
|
Returns {:ok, %Task{}}
|
||||||
"""
|
"""
|
||||||
def kickoff_indexing_task(%Source{} = source, job_args \\ %{}, job_opts \\ []) do
|
def kickoff_indexing_task(%Source{} = source, job_args \\ %{}, job_opts \\ []) do
|
||||||
Tasks.delete_pending_tasks_for(source, "FastIndexingWorker")
|
Tasks.delete_pending_tasks_for(source, "FastIndexingWorker")
|
||||||
|
|
@ -34,7 +34,12 @@ defmodule Pinchflat.SlowIndexing.SlowIndexingHelpers do
|
||||||
MediaCollectionIndexingWorker.kickoff_with_task(source, job_args, job_opts)
|
MediaCollectionIndexingWorker.kickoff_with_task(source, job_args, job_opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: test
|
@doc """
|
||||||
|
A helper method to delete all indexing-related tasks for a source.
|
||||||
|
Optionally, you can include executing tasks in the deletion process.
|
||||||
|
|
||||||
|
Returns :ok
|
||||||
|
"""
|
||||||
def delete_indexing_tasks(%Source{} = source, opts \\ []) do
|
def delete_indexing_tasks(%Source{} = source, opts \\ []) do
|
||||||
include_executing = Keyword.get(opts, :include_executing, false)
|
include_executing = Keyword.get(opts, :include_executing, false)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
defmodule Pinchflat.FastIndexing.FastIndexingHelpersTest do
|
defmodule Pinchflat.FastIndexing.FastIndexingHelpersTest do
|
||||||
use Pinchflat.DataCase
|
use Pinchflat.DataCase
|
||||||
|
|
||||||
|
import Pinchflat.TasksFixtures
|
||||||
import Pinchflat.MediaFixtures
|
import Pinchflat.MediaFixtures
|
||||||
import Pinchflat.SourcesFixtures
|
import Pinchflat.SourcesFixtures
|
||||||
import Pinchflat.ProfilesFixtures
|
import Pinchflat.ProfilesFixtures
|
||||||
|
|
@ -8,6 +9,7 @@ defmodule Pinchflat.FastIndexing.FastIndexingHelpersTest do
|
||||||
alias Pinchflat.Tasks
|
alias Pinchflat.Tasks
|
||||||
alias Pinchflat.Settings
|
alias Pinchflat.Settings
|
||||||
alias Pinchflat.Media.MediaItem
|
alias Pinchflat.Media.MediaItem
|
||||||
|
alias Pinchflat.FastIndexing.FastIndexingWorker
|
||||||
alias Pinchflat.Downloading.MediaDownloadWorker
|
alias Pinchflat.Downloading.MediaDownloadWorker
|
||||||
alias Pinchflat.FastIndexing.FastIndexingHelpers
|
alias Pinchflat.FastIndexing.FastIndexingHelpers
|
||||||
|
|
||||||
|
|
@ -19,6 +21,23 @@ defmodule Pinchflat.FastIndexing.FastIndexingHelpersTest do
|
||||||
{:ok, [source: source_fixture()]}
|
{:ok, [source: source_fixture()]}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "kickoff_indexing_task/1" do
|
||||||
|
test "deletes any existing fast indexing tasks", %{source: source} do
|
||||||
|
{:ok, job} = Oban.insert(FastIndexingWorker.new(%{"id" => source.id}))
|
||||||
|
task = task_fixture(source_id: source.id, job_id: job.id)
|
||||||
|
|
||||||
|
assert Repo.reload!(task)
|
||||||
|
assert {:ok, _} = FastIndexingHelpers.kickoff_indexing_task(source)
|
||||||
|
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "kicks off a new fast indexing task", %{source: source} do
|
||||||
|
assert {:ok, _} = FastIndexingHelpers.kickoff_indexing_task(source)
|
||||||
|
assert [worker] = all_enqueued(worker: FastIndexingWorker)
|
||||||
|
assert worker.args["id"] == source.id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "kickoff_download_tasks_from_youtube_rss_feed/1" do
|
describe "kickoff_download_tasks_from_youtube_rss_feed/1" do
|
||||||
test "enqueues a new worker for each new media_id in the source's RSS feed", %{source: source} do
|
test "enqueues a new worker for each new media_id in the source's RSS feed", %{source: source} do
|
||||||
expect(HTTPClientMock, :get, fn _url -> {:ok, "<yt:videoId>test_1</yt:videoId>"} end)
|
expect(HTTPClientMock, :get, fn _url -> {:ok, "<yt:videoId>test_1</yt:videoId>"} end)
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,56 @@ defmodule Pinchflat.SlowIndexing.SlowIndexingHelpersTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "delete_indexing_tasks/2" do
|
||||||
|
setup do
|
||||||
|
source = source_fixture()
|
||||||
|
|
||||||
|
{:ok, %{source: source}}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "deletes slow indexing tasks for the source", %{source: source} do
|
||||||
|
{:ok, job} = Oban.insert(MediaCollectionIndexingWorker.new(%{"id" => source.id}))
|
||||||
|
_task = task_fixture(source_id: source.id, job_id: job.id)
|
||||||
|
|
||||||
|
assert_enqueued(worker: MediaCollectionIndexingWorker, args: %{"id" => source.id})
|
||||||
|
assert :ok = SlowIndexingHelpers.delete_indexing_tasks(source)
|
||||||
|
refute_enqueued(worker: MediaCollectionIndexingWorker)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "deletes fast indexing tasks for the source", %{source: source} do
|
||||||
|
{:ok, job} = Oban.insert(FastIndexingWorker.new(%{"id" => source.id}))
|
||||||
|
_task = task_fixture(source_id: source.id, job_id: job.id)
|
||||||
|
|
||||||
|
assert_enqueued(worker: FastIndexingWorker, args: %{"id" => source.id})
|
||||||
|
assert :ok = SlowIndexingHelpers.delete_indexing_tasks(source)
|
||||||
|
refute_enqueued(worker: FastIndexingWorker)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "doesn't normally delete currently executing tasks", %{source: source} do
|
||||||
|
{:ok, job} = Oban.insert(MediaCollectionIndexingWorker.new(%{"id" => source.id}))
|
||||||
|
task = task_fixture(source_id: source.id, job_id: job.id)
|
||||||
|
|
||||||
|
from(Oban.Job, where: [id: ^job.id], update: [set: [state: "executing"]])
|
||||||
|
|> Repo.update_all([])
|
||||||
|
|
||||||
|
assert Repo.reload!(task)
|
||||||
|
assert :ok = SlowIndexingHelpers.delete_indexing_tasks(source)
|
||||||
|
assert Repo.reload!(task)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "can optionally delete currently executing tasks", %{source: source} do
|
||||||
|
{:ok, job} = Oban.insert(MediaCollectionIndexingWorker.new(%{"id" => source.id}))
|
||||||
|
task = task_fixture(source_id: source.id, job_id: job.id)
|
||||||
|
|
||||||
|
from(Oban.Job, where: [id: ^job.id], update: [set: [state: "executing"]])
|
||||||
|
|> Repo.update_all([])
|
||||||
|
|
||||||
|
assert Repo.reload!(task)
|
||||||
|
assert :ok = SlowIndexingHelpers.delete_indexing_tasks(source, include_executing: true)
|
||||||
|
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "index_and_enqueue_download_for_media_items/1" do
|
describe "index_and_enqueue_download_for_media_items/1" do
|
||||||
setup do
|
setup do
|
||||||
stub(YtDlpRunnerMock, :run, fn _url, _opts, _ot, _addl_opts ->
|
stub(YtDlpRunnerMock, :run, fn _url, _opts, _ot, _addl_opts ->
|
||||||
|
|
|
||||||
|
|
@ -247,7 +247,7 @@ defmodule Pinchflat.TasksTest do
|
||||||
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end
|
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "deletion can optionall include executing tasks" do
|
test "deletion can optionally include executing tasks" do
|
||||||
source = source_fixture()
|
source = source_fixture()
|
||||||
task = task_fixture(source_id: source.id)
|
task = task_fixture(source_id: source.id)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue