diff options
| -rw-r--r-- | lib/pleroma/user.ex | 15 | ||||
| -rw-r--r-- | test/user_test.exs | 14 | 
2 files changed, 21 insertions, 8 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 82922d236..d69ca094e 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -622,15 +622,14 @@ defmodule Pleroma.User do    end    def get_follow_requests(%User{} = user) do -    q = get_follow_requests_query(user) -    reqs = Repo.all(q) -      users = -      Enum.map(reqs, fn req -> req.actor end) -      |> Enum.uniq() -      |> Enum.map(fn ap_id -> get_by_ap_id(ap_id) end) -      |> Enum.filter(fn u -> !is_nil(u) end) -      |> Enum.filter(fn u -> !following?(u, user) end) +      user +      |> User.get_follow_requests_query() +      |> join(:inner, [a], u in User, a.actor == u.ap_id) +      |> where([a, u], not fragment("? @> ?", u.following, ^[user.follower_address])) +      |> group_by([a, u], u.id) +      |> select([a, u], u) +      |> Repo.all()      {:ok, users}    end diff --git a/test/user_test.exs b/test/user_test.exs index cbe4693fc..b8d41ecfd 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -64,6 +64,20 @@ defmodule Pleroma.UserTest do      assert activity    end +  test "doesn't return already accepted or duplicate follow requests" do +    locked = insert(:user, %{info: %{locked: true}}) +    pending_follower = insert(:user) +    accepted_follower = insert(:user) + +    Pleroma.Web.TwitterAPI.TwitterAPI.follow(pending_follower, %{"user_id" => locked.id}) +    Pleroma.Web.TwitterAPI.TwitterAPI.follow(pending_follower, %{"user_id" => locked.id}) +    Pleroma.Web.TwitterAPI.TwitterAPI.follow(accepted_follower, %{"user_id" => locked.id}) +    User.maybe_follow(accepted_follower, locked) + +    assert {:ok, [activity]} = User.get_follow_requests(locked) +    assert activity +  end +    test "follow_all follows mutliple users" do      user = insert(:user)      followed_zero = insert(:user)  | 
