forked from AkkomaGang/akkoma
mastodon api: implement follow_requests_count
This commit is contained in:
parent
eb9aa7aa10
commit
14294243a2
2 changed files with 91 additions and 0 deletions
|
@ -166,6 +166,7 @@ defp do_render("account.json", %{user: user} = opts) 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 @@ defp username_from_nickname(string) when is_binary(string) 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 @@ test "shows actual follower/following count to the account owner" 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