* Made method to getting singular media details; Renamed other related method * Takes a fun and flirty digression to remove abstractions around yt-dlp since I'm 100% committed to using it exclusively * Removed commented test code * Lays the groundwork for fast indexing * Added module for working with youtube RSS feed * Added methods to kick off indexing workers from RSS response * Improve short detection (#59) * Made media attribute-related yt-dlp calls return a struct * Added shorts attribute to media items * Added ability to discern a short from yt-dlp response * Updated search to use new shorts attribute * Fast index UI (#63) * Added fast_index field and adds it to source form * Added fast indexing to source changeset operations * Added fast indexing worker and updated other modules to start using it * Handled fast index worker on source update * Add support modals (#65) * Added fast indexing upgrade modal * Improved modal on smaller screens * Updated links to work again * Added donation modal * Reverted source fast index to 15 minutes * Removed unneeded HTML attributes from old alpine approach
78 lines
2.4 KiB
Elixir
78 lines
2.4 KiB
Elixir
defmodule Pinchflat.YtDlp.Backend.CommandRunnerTest do
|
|
use ExUnit.Case, async: true
|
|
|
|
alias Pinchflat.YtDlp.Backend.CommandRunner, as: Runner
|
|
|
|
@original_executable Application.compile_env(:pinchflat, :yt_dlp_executable)
|
|
@media_url "https://www.youtube.com/watch?v=-LHXuyzpex0"
|
|
|
|
setup do
|
|
on_exit(&reset_executable/0)
|
|
end
|
|
|
|
describe "run/4" do
|
|
test "it returns the output and status when the command succeeds" do
|
|
assert {:ok, _output} = Runner.run(@media_url, [], "")
|
|
end
|
|
|
|
test "it converts symbol k-v arg keys to kebab case" do
|
|
assert {:ok, output} = Runner.run(@media_url, [buffer_size: 1024], "")
|
|
|
|
assert String.contains?(output, "--buffer-size 1024")
|
|
end
|
|
|
|
test "it keeps string k-v arg keys untouched" do
|
|
assert {:ok, output} = Runner.run(@media_url, [{"--under_score", 1024}], "")
|
|
|
|
assert String.contains?(output, "--under_score 1024")
|
|
end
|
|
|
|
test "it converts symbol arg keys to kebab case" do
|
|
assert {:ok, output} = Runner.run(@media_url, [:ignore_errors], "")
|
|
|
|
assert String.contains?(output, "--ignore-errors")
|
|
end
|
|
|
|
test "it keeps string arg keys untouched" do
|
|
assert {:ok, output} = Runner.run(@media_url, ["-v"], "")
|
|
|
|
assert String.contains?(output, "-v")
|
|
refute String.contains?(output, "--v")
|
|
end
|
|
|
|
test "it includes the media url as the first argument" do
|
|
assert {:ok, output} = Runner.run(@media_url, [:ignore_errors], "")
|
|
|
|
assert String.contains?(output, "#{@media_url} --ignore-errors")
|
|
end
|
|
|
|
test "it automatically includes the --print-to-file flag" do
|
|
assert {:ok, output} = Runner.run(@media_url, [], "%(id)s")
|
|
|
|
assert String.contains?(output, "--print-to-file %(id)s /tmp/")
|
|
end
|
|
|
|
test "it returns the output and status when the command fails" do
|
|
wrap_executable("/bin/false", fn ->
|
|
assert {:error, "", 1} = Runner.run(@media_url, [], "")
|
|
end)
|
|
end
|
|
|
|
test "optionally lets you specify an output_filepath" do
|
|
assert {:ok, output} = Runner.run(@media_url, [], "%(id)s", output_filepath: "/tmp/yt-dlp-output.json")
|
|
|
|
assert String.contains?(output, "--print-to-file %(id)s /tmp/yt-dlp-output.json")
|
|
end
|
|
end
|
|
|
|
defp wrap_executable(new_executable, fun) do
|
|
Application.put_env(:pinchflat, :yt_dlp_executable, new_executable)
|
|
fun.()
|
|
reset_executable()
|
|
end
|
|
|
|
def reset_executable do
|
|
Application.put_env(:pinchflat, :yt_dlp_executable, @original_executable)
|
|
end
|
|
end
|