diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/following_relationship_test.exs | 47 | ||||
| -rw-r--r-- | test/http/request_builder_test.exs | 10 | ||||
| -rw-r--r-- | test/plugs/admin_secret_authentication_plug_test.exs | 42 | ||||
| -rw-r--r-- | test/plugs/user_enabled_plug_test.exs | 17 | ||||
| -rw-r--r-- | test/user_search_test.exs | 8 | ||||
| -rw-r--r-- | test/user_test.exs | 31 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/object_age_policy_test.exs | 105 | ||||
| -rw-r--r-- | test/web/admin_api/admin_api_controller_test.exs | 128 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/account_controller_test.exs | 23 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/filter_controller_test.exs | 2 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs | 2 | ||||
| -rw-r--r-- | test/web/node_info_test.exs | 27 | 
12 files changed, 405 insertions, 37 deletions
| diff --git a/test/following_relationship_test.exs b/test/following_relationship_test.exs new file mode 100644 index 000000000..93c079814 --- /dev/null +++ b/test/following_relationship_test.exs @@ -0,0 +1,47 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.FollowingRelationshipTest do +  use Pleroma.DataCase + +  alias Pleroma.FollowingRelationship +  alias Pleroma.Web.ActivityPub.InternalFetchActor +  alias Pleroma.Web.ActivityPub.Relay + +  import Pleroma.Factory + +  describe "following/1" do +    test "returns following addresses without internal.fetch" do +      user = insert(:user) +      fetch_actor = InternalFetchActor.get_actor() +      FollowingRelationship.follow(fetch_actor, user, "accept") +      assert FollowingRelationship.following(fetch_actor) == [user.follower_address] +    end + +    test "returns following addresses without relay" do +      user = insert(:user) +      relay_actor = Relay.get_actor() +      FollowingRelationship.follow(relay_actor, user, "accept") +      assert FollowingRelationship.following(relay_actor) == [user.follower_address] +    end + +    test "returns following addresses without remote user" do +      user = insert(:user) +      actor = insert(:user, local: false) +      FollowingRelationship.follow(actor, user, "accept") +      assert FollowingRelationship.following(actor) == [user.follower_address] +    end + +    test "returns following addresses with local user" do +      user = insert(:user) +      actor = insert(:user, local: true) +      FollowingRelationship.follow(actor, user, "accept") + +      assert FollowingRelationship.following(actor) == [ +               actor.follower_address, +               user.follower_address +             ] +    end +  end +end diff --git a/test/http/request_builder_test.exs b/test/http/request_builder_test.exs index 170ca916f..80ef25d7b 100644 --- a/test/http/request_builder_test.exs +++ b/test/http/request_builder_test.exs @@ -16,11 +16,21 @@ defmodule Pleroma.HTTP.RequestBuilderTest do      test "send pleroma user agent" do        Pleroma.Config.put([:http, :send_user_agent], true) +      Pleroma.Config.put([:http, :user_agent], :default)        assert RequestBuilder.headers(%{}, []) == %{                 headers: [{"User-Agent", Pleroma.Application.user_agent()}]               }      end + +    test "send custom user agent" do +      Pleroma.Config.put([:http, :send_user_agent], true) +      Pleroma.Config.put([:http, :user_agent], "totally-not-pleroma") + +      assert RequestBuilder.headers(%{}, []) == %{ +               headers: [{"User-Agent", "totally-not-pleroma"}] +             } +    end    end    describe "add_optional_params/3" do diff --git a/test/plugs/admin_secret_authentication_plug_test.exs b/test/plugs/admin_secret_authentication_plug_test.exs index c94a62c10..506b1f609 100644 --- a/test/plugs/admin_secret_authentication_plug_test.exs +++ b/test/plugs/admin_secret_authentication_plug_test.exs @@ -22,21 +22,39 @@ defmodule Pleroma.Plugs.AdminSecretAuthenticationPlugTest do      assert conn == ret_conn    end -  test "with secret set and given in the 'admin_token' parameter, it assigns an admin user", %{ -    conn: conn -  } do -    Pleroma.Config.put(:admin_token, "password123") +  describe "when secret set it assigns an admin user" do +    test "with `admin_token` query parameter", %{conn: conn} do +      Pleroma.Config.put(:admin_token, "password123") -    conn = -      %{conn | params: %{"admin_token" => "wrong_password"}} -      |> AdminSecretAuthenticationPlug.call(%{}) +      conn = +        %{conn | params: %{"admin_token" => "wrong_password"}} +        |> AdminSecretAuthenticationPlug.call(%{}) -    refute conn.assigns[:user] +      refute conn.assigns[:user] -    conn = -      %{conn | params: %{"admin_token" => "password123"}} -      |> AdminSecretAuthenticationPlug.call(%{}) +      conn = +        %{conn | params: %{"admin_token" => "password123"}} +        |> AdminSecretAuthenticationPlug.call(%{}) + +      assert conn.assigns[:user].is_admin +    end + +    test "with `x-admin-token` HTTP header", %{conn: conn} do +      Pleroma.Config.put(:admin_token, "☕️") + +      conn = +        conn +        |> put_req_header("x-admin-token", "🥛") +        |> AdminSecretAuthenticationPlug.call(%{}) + +      refute conn.assigns[:user] + +      conn = +        conn +        |> put_req_header("x-admin-token", "☕️") +        |> AdminSecretAuthenticationPlug.call(%{}) -    assert conn.assigns[:user].is_admin +      assert conn.assigns[:user].is_admin +    end    end  end diff --git a/test/plugs/user_enabled_plug_test.exs b/test/plugs/user_enabled_plug_test.exs index 996a7d77b..a4035bf0e 100644 --- a/test/plugs/user_enabled_plug_test.exs +++ b/test/plugs/user_enabled_plug_test.exs @@ -16,6 +16,23 @@ defmodule Pleroma.Plugs.UserEnabledPlugTest do      assert ret_conn == conn    end +  test "with a user that's not confirmed and a config requiring confirmation, it removes that user", +       %{conn: conn} do +    old = Pleroma.Config.get([:instance, :account_activation_required]) +    Pleroma.Config.put([:instance, :account_activation_required], true) + +    user = insert(:user, confirmation_pending: true) + +    conn = +      conn +      |> assign(:user, user) +      |> UserEnabledPlug.call(%{}) + +    assert conn.assigns.user == nil + +    Pleroma.Config.put([:instance, :account_activation_required], old) +  end +    test "with a user that is deactivated, it removes that user", %{conn: conn} do      user = insert(:user, deactivated: true) diff --git a/test/user_search_test.exs b/test/user_search_test.exs index 721af1e5b..98841dbbd 100644 --- a/test/user_search_test.exs +++ b/test/user_search_test.exs @@ -15,6 +15,14 @@ defmodule Pleroma.UserSearchTest do    end    describe "User.search" do +    test "excluded invisible users from results" do +      user = insert(:user, %{nickname: "john t1000"}) +      insert(:user, %{invisible: true, nickname: "john t800"}) + +      [found_user] = User.search("john") +      assert found_user.id == user.id +    end +      test "accepts limit parameter" do        Enum.each(0..4, &insert(:user, %{nickname: "john#{&1}"}))        assert length(User.search("john", limit: 3)) == 3 diff --git a/test/user_test.exs b/test/user_test.exs index 6b1b24ce5..e6302b525 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -25,6 +25,25 @@ defmodule Pleroma.UserTest do    clear_config([:instance, :account_activation_required]) +  describe "service actors" do +    test "returns invisible actor" do +      uri = "#{Pleroma.Web.Endpoint.url()}/internal/fetch-test" +      followers_uri = "#{uri}/followers" +      user = User.get_or_create_service_actor_by_ap_id(uri, "internal.fetch-test") + +      assert %User{ +               nickname: "internal.fetch-test", +               invisible: true, +               local: true, +               ap_id: ^uri, +               follower_address: ^followers_uri +             } = user + +      user2 = User.get_or_create_service_actor_by_ap_id(uri, "internal.fetch-test") +      assert user.id == user2.id +    end +  end +    describe "when tags are nil" do      test "tagging a user" do        user = insert(:user, %{tags: nil}) @@ -148,9 +167,10 @@ defmodule Pleroma.UserTest do      {:ok, user} = User.follow(user, followed)      user = User.get_cached_by_id(user.id) -      followed = User.get_cached_by_ap_id(followed.ap_id) +      assert followed.follower_count == 1 +    assert user.following_count == 1      assert User.ap_followers(followed) in User.following(user)    end @@ -952,12 +972,14 @@ defmodule Pleroma.UserTest do        user2 = insert(:user)        {:ok, user2} = User.follow(user2, user) +      assert user2.following_count == 1        assert User.following_count(user2) == 1        {:ok, _user} = User.deactivate(user)        info = User.get_cached_user_info(user2) +      assert refresh_record(user2).following_count == 0        assert info.following_count == 0        assert User.following_count(user2) == 0        assert [] = User.get_friends(user2) @@ -1195,6 +1217,13 @@ defmodule Pleroma.UserTest do      refute User.auth_active?(local_user)      assert User.auth_active?(confirmed_user)      assert User.auth_active?(remote_user) + +    # also shows unactive for deactivated users + +    deactivated_but_confirmed = +      insert(:user, local: true, confirmation_pending: false, deactivated: true) + +    refute User.auth_active?(deactivated_but_confirmed)    end    describe "superuser?/1" do diff --git a/test/web/activity_pub/mrf/object_age_policy_test.exs b/test/web/activity_pub/mrf/object_age_policy_test.exs new file mode 100644 index 000000000..643609da4 --- /dev/null +++ b/test/web/activity_pub/mrf/object_age_policy_test.exs @@ -0,0 +1,105 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do +  use Pleroma.DataCase +  alias Pleroma.Config +  alias Pleroma.User +  alias Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy +  alias Pleroma.Web.ActivityPub.Visibility + +  clear_config([:mrf_object_age]) do +    Config.put(:mrf_object_age, +      threshold: 172_800, +      actions: [:delist, :strip_followers] +    ) +  end + +  setup_all do +    Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) +    :ok +  end + +  describe "with reject action" do +    test "it rejects an old post" do +      Config.put([:mrf_object_age, :actions], [:reject]) + +      data = +        File.read!("test/fixtures/mastodon-post-activity.json") +        |> Poison.decode!() + +      {:reject, _} = ObjectAgePolicy.filter(data) +    end + +    test "it allows a new post" do +      Config.put([:mrf_object_age, :actions], [:reject]) + +      data = +        File.read!("test/fixtures/mastodon-post-activity.json") +        |> Poison.decode!() +        |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) + +      {:ok, _} = ObjectAgePolicy.filter(data) +    end +  end + +  describe "with delist action" do +    test "it delists an old post" do +      Config.put([:mrf_object_age, :actions], [:delist]) + +      data = +        File.read!("test/fixtures/mastodon-post-activity.json") +        |> Poison.decode!() + +      {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) + +      {:ok, data} = ObjectAgePolicy.filter(data) + +      assert Visibility.get_visibility(%{data: data}) == "unlisted" +    end + +    test "it allows a new post" do +      Config.put([:mrf_object_age, :actions], [:delist]) + +      data = +        File.read!("test/fixtures/mastodon-post-activity.json") +        |> Poison.decode!() +        |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) + +      {:ok, _user} = User.get_or_fetch_by_ap_id(data["actor"]) + +      {:ok, ^data} = ObjectAgePolicy.filter(data) +    end +  end + +  describe "with strip_followers action" do +    test "it strips followers collections from an old post" do +      Config.put([:mrf_object_age, :actions], [:strip_followers]) + +      data = +        File.read!("test/fixtures/mastodon-post-activity.json") +        |> Poison.decode!() + +      {:ok, user} = User.get_or_fetch_by_ap_id(data["actor"]) + +      {:ok, data} = ObjectAgePolicy.filter(data) + +      refute user.follower_address in data["to"] +      refute user.follower_address in data["cc"] +    end + +    test "it allows a new post" do +      Config.put([:mrf_object_age, :actions], [:strip_followers]) + +      data = +        File.read!("test/fixtures/mastodon-post-activity.json") +        |> Poison.decode!() +        |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) + +      {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) + +      {:ok, ^data} = ObjectAgePolicy.filter(data) +    end +  end +end diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 3a4c4d65c..9b4f359dc 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -225,7 +225,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          "roles" => %{"admin" => false, "moderator" => false},          "tags" => [],          "avatar" => User.avatar_url(user) |> MediaProxy.url(), -        "display_name" => HTML.strip_tags(user.name || user.nickname) +        "display_name" => HTML.strip_tags(user.name || user.nickname), +        "confirmation_pending" => false        }        assert expected == json_response(conn, 200) @@ -634,7 +635,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "local" => true,              "tags" => [],              "avatar" => User.avatar_url(admin) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(admin.name || admin.nickname) +            "display_name" => HTML.strip_tags(admin.name || admin.nickname), +            "confirmation_pending" => false            },            %{              "deactivated" => user.deactivated, @@ -644,7 +646,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "local" => false,              "tags" => ["foo", "bar"],              "avatar" => User.avatar_url(user) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(user.name || user.nickname) +            "display_name" => HTML.strip_tags(user.name || user.nickname), +            "confirmation_pending" => false            }          ]          |> Enum.sort_by(& &1["nickname"]) @@ -685,7 +688,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(user) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user.name || user.nickname) +                   "display_name" => HTML.strip_tags(user.name || user.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -709,7 +713,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(user) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user.name || user.nickname) +                   "display_name" => HTML.strip_tags(user.name || user.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -733,7 +738,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(user) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user.name || user.nickname) +                   "display_name" => HTML.strip_tags(user.name || user.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -757,7 +763,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(user) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user.name || user.nickname) +                   "display_name" => HTML.strip_tags(user.name || user.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -781,7 +788,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(user) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user.name || user.nickname) +                   "display_name" => HTML.strip_tags(user.name || user.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -805,7 +813,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(user) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user.name || user.nickname) +                   "display_name" => HTML.strip_tags(user.name || user.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -824,7 +833,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(user2) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user2.name || user2.nickname) +                   "display_name" => HTML.strip_tags(user2.name || user2.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -853,7 +863,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(user) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user.name || user.nickname) +                   "display_name" => HTML.strip_tags(user.name || user.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -880,7 +891,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "local" => true,              "tags" => [],              "avatar" => User.avatar_url(user) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(user.name || user.nickname) +            "display_name" => HTML.strip_tags(user.name || user.nickname), +            "confirmation_pending" => false            },            %{              "deactivated" => admin.deactivated, @@ -890,7 +902,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "local" => true,              "tags" => [],              "avatar" => User.avatar_url(admin) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(admin.name || admin.nickname) +            "display_name" => HTML.strip_tags(admin.name || admin.nickname), +            "confirmation_pending" => false            },            %{              "deactivated" => false, @@ -900,7 +913,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "roles" => %{"admin" => true, "moderator" => false},              "tags" => [],              "avatar" => User.avatar_url(old_admin) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(old_admin.name || old_admin.nickname) +            "display_name" => HTML.strip_tags(old_admin.name || old_admin.nickname), +            "confirmation_pending" => false            }          ]          |> Enum.sort_by(& &1["nickname"]) @@ -929,7 +943,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "local" => admin.local,              "tags" => [],              "avatar" => User.avatar_url(admin) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(admin.name || admin.nickname) +            "display_name" => HTML.strip_tags(admin.name || admin.nickname), +            "confirmation_pending" => false            },            %{              "deactivated" => false, @@ -939,7 +954,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "local" => second_admin.local,              "tags" => [],              "avatar" => User.avatar_url(second_admin) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(second_admin.name || second_admin.nickname) +            "display_name" => HTML.strip_tags(second_admin.name || second_admin.nickname), +            "confirmation_pending" => false            }          ]          |> Enum.sort_by(& &1["nickname"]) @@ -970,7 +986,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => moderator.local,                     "tags" => [],                     "avatar" => User.avatar_url(moderator) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(moderator.name || moderator.nickname) +                   "display_name" => HTML.strip_tags(moderator.name || moderator.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -994,7 +1011,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "local" => user1.local,              "tags" => ["first"],              "avatar" => User.avatar_url(user1) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(user1.name || user1.nickname) +            "display_name" => HTML.strip_tags(user1.name || user1.nickname), +            "confirmation_pending" => false            },            %{              "deactivated" => false, @@ -1004,7 +1022,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "local" => user2.local,              "tags" => ["second"],              "avatar" => User.avatar_url(user2) |> MediaProxy.url(), -            "display_name" => HTML.strip_tags(user2.name || user2.nickname) +            "display_name" => HTML.strip_tags(user2.name || user2.nickname), +            "confirmation_pending" => false            }          ]          |> Enum.sort_by(& &1["nickname"]) @@ -1040,7 +1059,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => user.local,                     "tags" => [],                     "avatar" => User.avatar_url(user) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(user.name || user.nickname) +                   "display_name" => HTML.strip_tags(user.name || user.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -1066,7 +1086,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "local" => true,                     "tags" => [],                     "avatar" => User.avatar_url(admin) |> MediaProxy.url(), -                   "display_name" => HTML.strip_tags(admin.name || admin.nickname) +                   "display_name" => HTML.strip_tags(admin.name || admin.nickname), +                   "confirmation_pending" => false                   }                 ]               } @@ -1135,7 +1156,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                 "local" => true,                 "tags" => [],                 "avatar" => User.avatar_url(user) |> MediaProxy.url(), -               "display_name" => HTML.strip_tags(user.name || user.nickname) +               "display_name" => HTML.strip_tags(user.name || user.nickname), +               "confirmation_pending" => false               }      log_entry = Repo.one(ModerationLog) @@ -2839,6 +2861,68 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                 "@#{admin.nickname} unfollowed relay: http://mastodon.example.org/users/admin"      end    end + +  describe "PATCH /confirm_email" do +    setup %{conn: conn} do +      admin = insert(:user, is_admin: true) + +      %{conn: assign(conn, :user, admin), admin: admin} +    end + +    test "it confirms emails of two users", %{admin: admin} do +      [first_user, second_user] = insert_pair(:user, confirmation_pending: true) + +      assert first_user.confirmation_pending == true +      assert second_user.confirmation_pending == true + +      build_conn() +      |> assign(:user, admin) +      |> patch("/api/pleroma/admin/users/confirm_email", %{ +        nicknames: [ +          first_user.nickname, +          second_user.nickname +        ] +      }) + +      assert first_user.confirmation_pending == true +      assert second_user.confirmation_pending == true + +      log_entry = Repo.one(ModerationLog) + +      assert ModerationLog.get_log_entry_message(log_entry) == +               "@#{admin.nickname} confirmed email for users: @#{first_user.nickname}, @#{ +                 second_user.nickname +               }" +    end +  end + +  describe "PATCH /resend_confirmation_email" do +    setup %{conn: conn} do +      admin = insert(:user, is_admin: true) + +      %{conn: assign(conn, :user, admin), admin: admin} +    end + +    test "it resend emails for two users", %{admin: admin} do +      [first_user, second_user] = insert_pair(:user, confirmation_pending: true) + +      build_conn() +      |> assign(:user, admin) +      |> patch("/api/pleroma/admin/users/resend_confirmation_email", %{ +        nicknames: [ +          first_user.nickname, +          second_user.nickname +        ] +      }) + +      log_entry = Repo.one(ModerationLog) + +      assert ModerationLog.get_log_entry_message(log_entry) == +               "@#{admin.nickname} re-sent confirmation email for users: @#{first_user.nickname}, @#{ +                 second_user.nickname +               }" +    end +  end  end  # Needed for testing diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 8fc2d9300..585cb8a9e 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -8,6 +8,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do    alias Pleroma.Repo    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.ActivityPub.InternalFetchActor    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.OAuth.Token @@ -118,6 +119,28 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        refute acc_one == acc_two        assert acc_two == acc_three      end + +    test "returns 404 when user is invisible", %{conn: conn} do +      user = insert(:user, %{invisible: true}) + +      resp = +        conn +        |> get("/api/v1/accounts/#{user.nickname}") +        |> json_response(404) + +      assert %{"error" => "Can't find user"} = resp +    end + +    test "returns 404 for internal.fetch actor", %{conn: conn} do +      %User{nickname: "internal.fetch"} = InternalFetchActor.get_actor() + +      resp = +        conn +        |> get("/api/v1/accounts/internal.fetch") +        |> json_response(404) + +      assert %{"error" => "Can't find user"} = resp +    end    end    describe "user timelines" do diff --git a/test/web/mastodon_api/controllers/filter_controller_test.exs b/test/web/mastodon_api/controllers/filter_controller_test.exs index 5d5b56c8e..550689788 100644 --- a/test/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/web/mastodon_api/controllers/filter_controller_test.exs @@ -3,7 +3,7 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do -  use Pleroma.Web.ConnCase, async: true +  use Pleroma.Web.ConnCase    alias Pleroma.Web.MastodonAPI.FilterView diff --git a/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs b/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs index 9ad6a4fa7..ae5fee2bc 100644 --- a/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs +++ b/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs @@ -3,7 +3,7 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do -  use Pleroma.Web.ConnCase, async: true +  use Pleroma.Web.ConnCase    alias Pleroma.Repo    alias Pleroma.ScheduledActivity diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs index 6cc876602..9a574a38d 100644 --- a/test/web/node_info_test.exs +++ b/test/web/node_info_test.exs @@ -61,6 +61,33 @@ defmodule Pleroma.Web.NodeInfoTest do      assert Pleroma.Application.repository() == result["software"]["repository"]    end +  test "returns fieldsLimits field", %{conn: conn} do +    max_account_fields = Pleroma.Config.get([:instance, :max_account_fields]) +    max_remote_account_fields = Pleroma.Config.get([:instance, :max_remote_account_fields]) +    account_field_name_length = Pleroma.Config.get([:instance, :account_field_name_length]) +    account_field_value_length = Pleroma.Config.get([:instance, :account_field_value_length]) + +    Pleroma.Config.put([:instance, :max_account_fields], 10) +    Pleroma.Config.put([:instance, :max_remote_account_fields], 15) +    Pleroma.Config.put([:instance, :account_field_name_length], 255) +    Pleroma.Config.put([:instance, :account_field_value_length], 2048) + +    response = +      conn +      |> get("/nodeinfo/2.1.json") +      |> json_response(:ok) + +    assert response["metadata"]["fieldsLimits"]["maxFields"] == 10 +    assert response["metadata"]["fieldsLimits"]["maxRemoteFields"] == 15 +    assert response["metadata"]["fieldsLimits"]["nameLength"] == 255 +    assert response["metadata"]["fieldsLimits"]["valueLength"] == 2048 + +    Pleroma.Config.put([:instance, :max_account_fields], max_account_fields) +    Pleroma.Config.put([:instance, :max_remote_account_fields], max_remote_account_fields) +    Pleroma.Config.put([:instance, :account_field_name_length], account_field_name_length) +    Pleroma.Config.put([:instance, :account_field_value_length], account_field_value_length) +  end +    test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do      option = Pleroma.Config.get([:instance, :safe_dm_mentions])      Pleroma.Config.put([:instance, :safe_dm_mentions], true) | 
