diff options
Diffstat (limited to 'test/tasks')
| -rw-r--r-- | test/tasks/app_test.exs | 65 | ||||
| -rw-r--r-- | test/tasks/config_test.exs | 3 | ||||
| -rw-r--r-- | test/tasks/count_statuses_test.exs | 6 | ||||
| -rw-r--r-- | test/tasks/database_test.exs | 8 | ||||
| -rw-r--r-- | test/tasks/digest_test.exs | 2 | ||||
| -rw-r--r-- | test/tasks/emoji_test.exs | 226 | ||||
| -rw-r--r-- | test/tasks/refresh_counter_cache_test.exs | 14 | ||||
| -rw-r--r-- | test/tasks/user_test.exs | 45 | 
8 files changed, 347 insertions, 22 deletions
| diff --git a/test/tasks/app_test.exs b/test/tasks/app_test.exs new file mode 100644 index 000000000..b8f03566d --- /dev/null +++ b/test/tasks/app_test.exs @@ -0,0 +1,65 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Mix.Tasks.Pleroma.AppTest do +  use Pleroma.DataCase, async: true + +  setup_all do +    Mix.shell(Mix.Shell.Process) + +    on_exit(fn -> +      Mix.shell(Mix.Shell.IO) +    end) +  end + +  describe "creates new app" do +    test "with default scopes" do +      name = "Some name" +      redirect = "https://example.com" +      Mix.Tasks.Pleroma.App.run(["create", "-n", name, "-r", redirect]) + +      assert_app(name, redirect, ["read", "write", "follow", "push"]) +    end + +    test "with custom scopes" do +      name = "Another name" +      redirect = "https://example.com" + +      Mix.Tasks.Pleroma.App.run([ +        "create", +        "-n", +        name, +        "-r", +        redirect, +        "-s", +        "read,write,follow,push,admin" +      ]) + +      assert_app(name, redirect, ["read", "write", "follow", "push", "admin"]) +    end +  end + +  test "with errors" do +    Mix.Tasks.Pleroma.App.run(["create"]) +    {:mix_shell, :error, ["Creating failed:"]} +    {:mix_shell, :error, ["name: can't be blank"]} +    {:mix_shell, :error, ["redirect_uris: can't be blank"]} +  end + +  defp assert_app(name, redirect, scopes) do +    app = Repo.get_by(Pleroma.Web.OAuth.App, client_name: name) + +    assert_received {:mix_shell, :info, [message]} +    assert message == "#{name} successfully created:" + +    assert_received {:mix_shell, :info, [message]} +    assert message == "App client_id: #{app.client_id}" + +    assert_received {:mix_shell, :info, [message]} +    assert message == "App client_secret: #{app.client_secret}" + +    assert app.scopes == scopes +    assert app.redirect_uris == redirect +  end +end diff --git a/test/tasks/config_test.exs b/test/tasks/config_test.exs index 3dee4f082..04bc947a9 100644 --- a/test/tasks/config_test.exs +++ b/test/tasks/config_test.exs @@ -38,7 +38,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do        on_exit(fn -> Application.put_env(:quack, :level, initial) end)      end -    test "settings are migrated to db" do +    test "filtered settings are migrated to db" do        assert Repo.all(ConfigDB) == []        Mix.Tasks.Pleroma.Config.migrate_to_db("test/fixtures/config/temp.secret.exs") @@ -47,6 +47,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do        config2 = ConfigDB.get_by_params(%{group: ":pleroma", key: ":second_setting"})        config3 = ConfigDB.get_by_params(%{group: ":quack", key: ":level"})        refute ConfigDB.get_by_params(%{group: ":pleroma", key: "Pleroma.Repo"}) +      refute ConfigDB.get_by_params(%{group: ":postgrex", key: ":json_library"})        assert ConfigDB.from_binary(config1.value) == [key: "value", key2: [Repo]]        assert ConfigDB.from_binary(config2.value) == [key: "value2", key2: ["Activity"]] diff --git a/test/tasks/count_statuses_test.exs b/test/tasks/count_statuses_test.exs index 73c2ea690..c5cd16960 100644 --- a/test/tasks/count_statuses_test.exs +++ b/test/tasks/count_statuses_test.exs @@ -13,11 +13,11 @@ defmodule Mix.Tasks.Pleroma.CountStatusesTest do    test "counts statuses" do      user = insert(:user) -    {:ok, _} = CommonAPI.post(user, %{"status" => "test"}) -    {:ok, _} = CommonAPI.post(user, %{"status" => "test2"}) +    {:ok, _} = CommonAPI.post(user, %{status: "test"}) +    {:ok, _} = CommonAPI.post(user, %{status: "test2"})      user2 = insert(:user) -    {:ok, _} = CommonAPI.post(user2, %{"status" => "test3"}) +    {:ok, _} = CommonAPI.post(user2, %{status: "test3"})      user = refresh_record(user)      user2 = refresh_record(user2) diff --git a/test/tasks/database_test.exs b/test/tasks/database_test.exs index ed1c31d9c..883828d77 100644 --- a/test/tasks/database_test.exs +++ b/test/tasks/database_test.exs @@ -26,7 +26,7 @@ defmodule Mix.Tasks.Pleroma.DatabaseTest do    describe "running remove_embedded_objects" do      test "it replaces objects with references" do        user = insert(:user) -      {:ok, activity} = CommonAPI.post(user, %{"status" => "test"}) +      {:ok, activity} = CommonAPI.post(user, %{status: "test"})        new_data = Map.put(activity.data, "object", activity.object.data)        {:ok, activity} = @@ -99,10 +99,10 @@ defmodule Mix.Tasks.Pleroma.DatabaseTest do      test "it turns OrderedCollection likes into empty arrays" do        [user, user2] = insert_pair(:user) -      {:ok, %{id: id, object: object}} = CommonAPI.post(user, %{"status" => "test"}) -      {:ok, %{object: object2}} = CommonAPI.post(user, %{"status" => "test test"}) +      {:ok, %{id: id, object: object}} = CommonAPI.post(user, %{status: "test"}) +      {:ok, %{object: object2}} = CommonAPI.post(user, %{status: "test test"}) -      CommonAPI.favorite(id, user2) +      CommonAPI.favorite(user2, id)        likes = %{          "first" => diff --git a/test/tasks/digest_test.exs b/test/tasks/digest_test.exs index 96d762685..eefbc8936 100644 --- a/test/tasks/digest_test.exs +++ b/test/tasks/digest_test.exs @@ -25,7 +25,7 @@ defmodule Mix.Tasks.Pleroma.DigestTest do        Enum.each(0..10, fn i ->          {:ok, _activity} =            CommonAPI.post(user1, %{ -            "status" => "hey ##{i} @#{user2.nickname}!" +            status: "hey ##{i} @#{user2.nickname}!"            })        end) diff --git a/test/tasks/emoji_test.exs b/test/tasks/emoji_test.exs new file mode 100644 index 000000000..f5de3ef0e --- /dev/null +++ b/test/tasks/emoji_test.exs @@ -0,0 +1,226 @@ +defmodule Mix.Tasks.Pleroma.EmojiTest do +  use ExUnit.Case, async: true + +  import ExUnit.CaptureIO +  import Tesla.Mock + +  alias Mix.Tasks.Pleroma.Emoji + +  describe "ls-packs" do +    test "with default manifest as url" do +      mock(fn +        %{ +          method: :get, +          url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json" +        } -> +          %Tesla.Env{ +            status: 200, +            body: File.read!("test/fixtures/emoji/packs/default-manifest.json") +          } +      end) + +      capture_io(fn -> Emoji.run(["ls-packs"]) end) =~ +        "https://finland.fi/wp-content/uploads/2017/06/finland-emojis.zip" +    end + +    test "with passed manifest as file" do +      capture_io(fn -> +        Emoji.run(["ls-packs", "-m", "test/fixtures/emoji/packs/manifest.json"]) +      end) =~ "https://git.pleroma.social/pleroma/emoji-index/raw/master/packs/blobs_gg.zip" +    end +  end + +  describe "get-packs" do +    test "download pack from default manifest" do +      mock(fn +        %{ +          method: :get, +          url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json" +        } -> +          %Tesla.Env{ +            status: 200, +            body: File.read!("test/fixtures/emoji/packs/default-manifest.json") +          } + +        %{ +          method: :get, +          url: "https://finland.fi/wp-content/uploads/2017/06/finland-emojis.zip" +        } -> +          %Tesla.Env{ +            status: 200, +            body: File.read!("test/fixtures/emoji/packs/blank.png.zip") +          } + +        %{ +          method: :get, +          url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/finmoji.json" +        } -> +          %Tesla.Env{ +            status: 200, +            body: File.read!("test/fixtures/emoji/packs/finmoji.json") +          } +      end) + +      assert capture_io(fn -> Emoji.run(["get-packs", "finmoji"]) end) =~ "Writing pack.json for" + +      emoji_path = +        Path.join( +          Pleroma.Config.get!([:instance, :static_dir]), +          "emoji" +        ) + +      assert File.exists?(Path.join([emoji_path, "finmoji", "pack.json"])) +      on_exit(fn -> File.rm_rf!("test/instance_static/emoji/finmoji") end) +    end + +    test "pack not found" do +      mock(fn +        %{ +          method: :get, +          url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json" +        } -> +          %Tesla.Env{ +            status: 200, +            body: File.read!("test/fixtures/emoji/packs/default-manifest.json") +          } +      end) + +      assert capture_io(fn -> Emoji.run(["get-packs", "not_found"]) end) =~ +               "No pack named \"not_found\" found" +    end + +    test "raise on bad sha256" do +      mock(fn +        %{ +          method: :get, +          url: "https://git.pleroma.social/pleroma/emoji-index/raw/master/packs/blobs_gg.zip" +        } -> +          %Tesla.Env{ +            status: 200, +            body: File.read!("test/fixtures/emoji/packs/blank.png.zip") +          } +      end) + +      assert_raise RuntimeError, ~r/^Bad SHA256 for blobs.gg/, fn -> +        capture_io(fn -> +          Emoji.run(["get-packs", "blobs.gg", "-m", "test/fixtures/emoji/packs/manifest.json"]) +        end) +      end +    end +  end + +  describe "gen-pack" do +    setup do +      url = "https://finland.fi/wp-content/uploads/2017/06/finland-emojis.zip" + +      mock(fn %{ +                method: :get, +                url: ^url +              } -> +        %Tesla.Env{status: 200, body: File.read!("test/fixtures/emoji/packs/blank.png.zip")} +      end) + +      {:ok, url: url} +    end + +    test "with default extensions", %{url: url} do +      name = "pack1" +      pack_json = "#{name}.json" +      files_json = "#{name}_file.json" +      refute File.exists?(pack_json) +      refute File.exists?(files_json) + +      captured = +        capture_io(fn -> +          Emoji.run([ +            "gen-pack", +            url, +            "--name", +            name, +            "--license", +            "license", +            "--homepage", +            "homepage", +            "--description", +            "description", +            "--files", +            files_json, +            "--extensions", +            ".png .gif" +          ]) +        end) + +      assert captured =~ "#{pack_json} has been created with the pack1 pack" +      assert captured =~ "Using .png .gif extensions" + +      assert File.exists?(pack_json) +      assert File.exists?(files_json) + +      on_exit(fn -> +        File.rm!(pack_json) +        File.rm!(files_json) +      end) +    end + +    test "with custom extensions and update existing files", %{url: url} do +      name = "pack2" +      pack_json = "#{name}.json" +      files_json = "#{name}_file.json" +      refute File.exists?(pack_json) +      refute File.exists?(files_json) + +      captured = +        capture_io(fn -> +          Emoji.run([ +            "gen-pack", +            url, +            "--name", +            name, +            "--license", +            "license", +            "--homepage", +            "homepage", +            "--description", +            "description", +            "--files", +            files_json, +            "--extensions", +            " .png   .gif    .jpeg " +          ]) +        end) + +      assert captured =~ "#{pack_json} has been created with the pack2 pack" +      assert captured =~ "Using .png .gif .jpeg extensions" + +      assert File.exists?(pack_json) +      assert File.exists?(files_json) + +      captured = +        capture_io(fn -> +          Emoji.run([ +            "gen-pack", +            url, +            "--name", +            name, +            "--license", +            "license", +            "--homepage", +            "homepage", +            "--description", +            "description", +            "--files", +            files_json, +            "--extensions", +            " .png   .gif    .jpeg " +          ]) +        end) + +      assert captured =~ "#{pack_json} has been updated with the pack2 pack" + +      on_exit(fn -> +        File.rm!(pack_json) +        File.rm!(files_json) +      end) +    end +  end +end diff --git a/test/tasks/refresh_counter_cache_test.exs b/test/tasks/refresh_counter_cache_test.exs index b63f44c08..851971a77 100644 --- a/test/tasks/refresh_counter_cache_test.exs +++ b/test/tasks/refresh_counter_cache_test.exs @@ -12,26 +12,26 @@ defmodule Mix.Tasks.Pleroma.RefreshCounterCacheTest do      user = insert(:user)      other_user = insert(:user) -    CommonAPI.post(user, %{"visibility" => "public", "status" => "hey"}) +    CommonAPI.post(user, %{visibility: "public", status: "hey"})      Enum.each(0..1, fn _ ->        CommonAPI.post(user, %{ -        "visibility" => "unlisted", -        "status" => "hey" +        visibility: "unlisted", +        status: "hey"        })      end)      Enum.each(0..2, fn _ ->        CommonAPI.post(user, %{ -        "visibility" => "direct", -        "status" => "hey @#{other_user.nickname}" +        visibility: "direct", +        status: "hey @#{other_user.nickname}"        })      end)      Enum.each(0..3, fn _ ->        CommonAPI.post(user, %{ -        "visibility" => "private", -        "status" => "hey" +        visibility: "private", +        status: "hey"        })      end) diff --git a/test/tasks/user_test.exs b/test/tasks/user_test.exs index b45f37263..4aa873f0b 100644 --- a/test/tasks/user_test.exs +++ b/test/tasks/user_test.exs @@ -3,15 +3,21 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Mix.Tasks.Pleroma.UserTest do +  alias Pleroma.Activity +  alias Pleroma.Object    alias Pleroma.Repo +  alias Pleroma.Tests.ObanHelpers    alias Pleroma.User +  alias Pleroma.Web.CommonAPI    alias Pleroma.Web.OAuth.Authorization    alias Pleroma.Web.OAuth.Token    use Pleroma.DataCase +  use Oban.Testing, repo: Pleroma.Repo -  import Pleroma.Factory    import ExUnit.CaptureIO +  import Mock +  import Pleroma.Factory    setup_all do      Mix.shell(Mix.Shell.Process) @@ -87,12 +93,39 @@ defmodule Mix.Tasks.Pleroma.UserTest do      test "user is deleted" do        user = insert(:user) -      Mix.Tasks.Pleroma.User.run(["rm", user.nickname]) +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        Mix.Tasks.Pleroma.User.run(["rm", user.nickname]) +        ObanHelpers.perform_all() -      assert_received {:mix_shell, :info, [message]} -      assert message =~ " deleted" +        assert_received {:mix_shell, :info, [message]} +        assert message =~ " deleted" +        assert %{deactivated: true} = User.get_by_nickname(user.nickname) + +        assert called(Pleroma.Web.Federator.publish(:_)) +      end +    end + +    test "a remote user's create activity is deleted when the object has been pruned" do +      user = insert(:user) + +      {:ok, post} = CommonAPI.post(user, %{status: "uguu"}) +      object = Object.normalize(post) +      Object.prune(object) + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        Mix.Tasks.Pleroma.User.run(["rm", user.nickname]) +        ObanHelpers.perform_all() + +        assert_received {:mix_shell, :info, [message]} +        assert message =~ " deleted" +        assert %{deactivated: true} = User.get_by_nickname(user.nickname) + +        assert called(Pleroma.Web.Federator.publish(:_)) +      end -      refute User.get_by_nickname(user.nickname) +      refute Activity.get_by_id(post.id)      end      test "no user to delete" do @@ -140,7 +173,7 @@ defmodule Mix.Tasks.Pleroma.UserTest do      test "user is unsubscribed" do        followed = insert(:user)        user = insert(:user) -      User.follow(user, followed, "accept") +      User.follow(user, followed, :follow_accept)        Mix.Tasks.Pleroma.User.run(["unsubscribe", user.nickname]) | 
