Files
pinchflat/test/pinchflat/notifications/command_runner_test.exs
T
Kieran 8a0ae89bc0 [Enhancement] Add Apprise support (#170)
* [WIP] add settings sidebar entry and placeholder page

* [WIP] added placeholder UI and logic for settings form

* Added column and UI for apprise server

* Add some tests

* Added placeholder command runner for apprise

* [WIP] Adding apprise package

* Added apprise command runner

* Hooked up apprise notification module

* Ensured apprise was running in verbose mode

* Updated wording of apprise notification

* Added apprise to README
2024-04-09 09:45:39 -07:00

66 lines
1.8 KiB
Elixir

defmodule Pinchflat.Notifications.CommandRunnerTest do
use ExUnit.Case, async: true
alias Pinchflat.Notifications.CommandRunner, as: Runner
@original_executable Application.compile_env(:pinchflat, :apprise_executable)
setup do
on_exit(&reset_executable/0)
end
describe "run/2" do
test "returns :ok when the command succeeds" do
assert {:ok, _} = Runner.run("server_1", [])
end
test "includes the servers as the first argument" do
assert {:ok, output} = Runner.run(["server_1", "server_2"], [])
assert String.contains?(output, "server_1 server_2")
end
test "lets you pass a single server as a string" do
assert {:ok, output} = Runner.run("server_1", [])
assert String.contains?(output, "server_1")
end
test "passes all arguments to the command" do
assert {:ok, output} = Runner.run("server_1", ["--dry-run"])
assert String.contains?(output, "--dry-run")
end
test "returns the output when the command fails" do
wrap_executable("/bin/false", fn ->
assert {:error, ""} = Runner.run("server_1", [])
end)
end
test "returns a relevant error if no servers are provided" do
assert {:error, :no_servers} = Runner.run(nil, [])
assert {:error, :no_servers} = Runner.run("", [])
assert {:error, :no_servers} = Runner.run([], [])
end
end
describe "version/0" do
test "adds the version arg" do
assert {:ok, output} = Runner.version()
assert String.contains?(output, "--version")
end
end
defp wrap_executable(new_executable, fun) do
Application.put_env(:pinchflat, :apprise_executable, new_executable)
fun.()
reset_executable()
end
def reset_executable do
Application.put_env(:pinchflat, :apprise_executable, @original_executable)
end
end