mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-23 00:26:30 +00:00
Merge branch 'feature/follow-requests-count' into 'develop'
Mastodon API: add follow_requests_count See merge request pleroma/pleroma!1726
This commit is contained in:
commit
6d74a7528c
3 changed files with 92 additions and 0 deletions
|
@ -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/clear` to clear all subscription notifications
|
||||||
- Pleroma API: `POST /api/v1/pleroma/subscription_notifications/dismiss` to clear a subscription notification
|
- 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
|
- 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
|
### Changed
|
||||||
- **Breaking:** Elixir >=1.8 is now required (was >= 1.7)
|
- **Breaking:** Elixir >=1.8 is now required (was >= 1.7)
|
||||||
|
|
|
@ -166,6 +166,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
|> maybe_put_settings_store(user, opts[:for], opts)
|
|> maybe_put_settings_store(user, opts[:for], opts)
|
||||||
|> maybe_put_chat_token(user, opts[:for], opts)
|
|> maybe_put_chat_token(user, opts[:for], opts)
|
||||||
|> maybe_put_activation_status(user, opts[:for])
|
|> maybe_put_activation_status(user, opts[:for])
|
||||||
|
|> maybe_put_follow_requests_count(user, opts[:for])
|
||||||
end
|
end
|
||||||
|
|
||||||
defp username_from_nickname(string) when is_binary(string) do
|
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 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(
|
defp maybe_put_settings(
|
||||||
data,
|
data,
|
||||||
%User{id: user_id} = user,
|
%User{id: user_id} = user,
|
||||||
|
|
|
@ -419,4 +419,79 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
|
||||||
} = AccountView.render("account.json", %{user: user, for: user})
|
} = AccountView.render("account.json", %{user: user, for: user})
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue