defmodule Pinchflat.Boot.PreJobStartupTasksTest do use Pinchflat.DataCase import Mox import Pinchflat.JobFixtures alias Pinchflat.Settings alias Pinchflat.Boot.PreJobStartupTasks setup do stub(YtDlpRunnerMock, :version, fn -> {:ok, "1"} end) stub(AppriseRunnerMock, :version, fn -> {:ok, "2"} end) :ok end describe "reset_executing_jobs" do test "resets executing jobs" do job = job_fixture() Repo.update_all(Oban.Job, set: [state: "executing"]) assert Repo.reload!(job).state == "executing" PreJobStartupTasks.init(%{}) assert Repo.reload!(job).state == "retryable" end end describe "create_blank_yt_dlp_files" do test "creates a blank cookie file" do base_dir = Application.get_env(:pinchflat, :extras_directory) filepath = Path.join(base_dir, "cookies.txt") File.rm(filepath) refute File.exists?(filepath) PreJobStartupTasks.init(%{}) assert File.exists?(filepath) end test "creates a blank yt-dlp config file" do base_dir = Application.get_env(:pinchflat, :extras_directory) filepath = Path.join([base_dir, "yt-dlp-configs", "base-config.txt"]) File.rm(filepath) refute File.exists?(filepath) PreJobStartupTasks.init(%{}) assert File.exists?(filepath) end end describe "create_blank_user_script_file" do test "creates a blank script file" do base_dir = Application.get_env(:pinchflat, :extras_directory) filepath = Path.join([base_dir, "user-scripts", "lifecycle"]) File.rm(filepath) refute File.exists?(filepath) PreJobStartupTasks.init(%{}) assert File.exists?(filepath) end test "gives it 755 permissions" do base_dir = Application.get_env(:pinchflat, :extras_directory) filepath = Path.join([base_dir, "user-scripts", "lifecycle"]) File.rm(filepath) PreJobStartupTasks.init(%{}) assert File.stat!(filepath).mode == 0o100755 end end describe "apply_default_settings" do test "sets yt_dlp version" do Settings.set(yt_dlp_version: nil) refute Settings.get!(:yt_dlp_version) PreJobStartupTasks.init(%{}) assert Settings.get!(:yt_dlp_version) end test "sets apprise version" do Settings.set(apprise_version: nil) refute Settings.get!(:apprise_version) PreJobStartupTasks.init(%{}) assert Settings.get!(:apprise_version) end end end