# Pleroma: A lightweight social networking server # Copyright © 2017-2021 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.UploadsTest do alias Pleroma.Upload use Pleroma.DataCase, async: false import Mock setup_all do Mix.shell(Mix.Shell.Process) on_exit(fn -> Mix.shell(Mix.Shell.IO) end) File.mkdir_p!("test/uploads") :ok end describe "running migrate_local" do test "uploads migrated" do with_mock Upload, store: fn %Upload{name: _file, path: _path}, _opts -> {:ok, %{}} end do Mix.Tasks.Pleroma.Uploads.run(["migrate_local", "S3"]) assert_receive {:mix_shell, :info, [message]} assert message =~ "Migrating files from local" assert_receive {:mix_shell, :info, [message]} assert %{"total_count" => total_count} = Regex.named_captures(~r"^Found (?\d+) uploads$", message) assert_receive {:mix_shell, :info, [message]} # @logevery in Mix.Tasks.Pleroma.Uploads count = min(50, String.to_integer(total_count)) |> to_string() assert %{"count" => ^count, "total_count" => ^total_count} = Regex.named_captures( ~r"^Uploaded (?\d+)/(?\d+) files$", message ) end end test "nonexistent uploader" do assert_raise RuntimeError, ~r/The uploader .* is not an existing/, fn -> Mix.Tasks.Pleroma.Uploads.run(["migrate_local", "nonexistent"]) end end end end