diff options
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/account_view.ex | 16 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/account_view_test.exs | 75 | 
3 files changed, 92 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 43a204be5..e859e318a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).  - Pleroma API: `POST /api/v1/pleroma/subscription_notifications/clear` to clear all subscription notifications  - Pleroma API: `POST /api/v1/pleroma/subscription_notifications/dismiss` to clear a subscription notification  - Pleroma API: `DELETE /api/v1/pleroma/subscription_notifications/destroy_multiple` to clear multiple subscription notifications +- Mastodon API: Account entities now include `follow_requests_count` (planned Mastodon 3.x addition)  ### Changed  - **Breaking:** Elixir >=1.8 is now required (was >= 1.7) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index a23aeea9b..8cf9e9d5c 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -166,6 +166,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do      |> maybe_put_settings_store(user, opts[:for], opts)      |> maybe_put_chat_token(user, opts[:for], opts)      |> maybe_put_activation_status(user, opts[:for]) +    |> maybe_put_follow_requests_count(user, opts[:for])    end    defp username_from_nickname(string) when is_binary(string) do @@ -174,6 +175,21 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do    defp username_from_nickname(_), do: nil +  defp maybe_put_follow_requests_count( +         data, +         %User{id: user_id} = user, +         %User{id: user_id} +       ) do +    count = +      User.get_follow_requests(user) +      |> length() + +    data +    |> Kernel.put_in([:follow_requests_count], count) +  end + +  defp maybe_put_follow_requests_count(data, _, _), do: data +    defp maybe_put_settings(           data,           %User{id: user_id} = user, diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index f2f334992..d965f76bf 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -419,4 +419,79 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do               } = AccountView.render("account.json", %{user: user, for: user})      end    end + +  describe "follow requests counter" do +    test "shows zero when no follow requests are pending" do +      user = insert(:user) + +      assert %{follow_requests_count: 0} = +               AccountView.render("account.json", %{user: user, for: user}) + +      other_user = insert(:user) +      {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user) + +      assert %{follow_requests_count: 0} = +               AccountView.render("account.json", %{user: user, for: user}) +    end + +    test "shows non-zero when follow requests are pending" do +      user = insert(:user, %{info: %{locked: true}}) + +      assert %{locked: true} = AccountView.render("account.json", %{user: user, for: user}) + +      other_user = insert(:user) +      {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user) + +      assert %{locked: true, follow_requests_count: 1} = +               AccountView.render("account.json", %{user: user, for: user}) +    end + +    test "decreases when accepting a follow request" do +      user = insert(:user, %{info: %{locked: true}}) + +      assert %{locked: true} = AccountView.render("account.json", %{user: user, for: user}) + +      other_user = insert(:user) +      {:ok, other_user, user, _activity} = CommonAPI.follow(other_user, user) + +      assert %{locked: true, follow_requests_count: 1} = +               AccountView.render("account.json", %{user: user, for: user}) + +      {:ok, _other_user} = CommonAPI.accept_follow_request(other_user, user) + +      assert %{locked: true, follow_requests_count: 0} = +               AccountView.render("account.json", %{user: user, for: user}) +    end + +    test "decreases when rejecting a follow request" do +      user = insert(:user, %{info: %{locked: true}}) + +      assert %{locked: true} = AccountView.render("account.json", %{user: user, for: user}) + +      other_user = insert(:user) +      {:ok, other_user, user, _activity} = CommonAPI.follow(other_user, user) + +      assert %{locked: true, follow_requests_count: 1} = +               AccountView.render("account.json", %{user: user, for: user}) + +      {:ok, _other_user} = CommonAPI.reject_follow_request(other_user, user) + +      assert %{locked: true, follow_requests_count: 0} = +               AccountView.render("account.json", %{user: user, for: user}) +    end + +    test "shows non-zero when historical unapproved requests are present" do +      user = insert(:user, %{info: %{locked: true}}) + +      assert %{locked: true} = AccountView.render("account.json", %{user: user, for: user}) + +      other_user = insert(:user) +      {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user) + +      {:ok, user} = User.update_info(user, &User.Info.user_upgrade(&1, %{locked: false})) + +      assert %{locked: false, follow_requests_count: 1} = +               AccountView.render("account.json", %{user: user, for: user}) +    end +  end  end  | 
