Respect blocks in mass follow.
authorlain <lain@soykaf.club>
Sat, 9 Feb 2019 12:24:23 +0000 (13:24 +0100)
committerlain <lain@soykaf.club>
Sat, 9 Feb 2019 12:24:23 +0000 (13:24 +0100)
lib/pleroma/user.ex
test/user_test.exs

index 33630ac7c98fe439105def36f08528ccf471c211..cd7752554588cb9e3e66bf24ed5c96f653f8a05e 100644 (file)
@@ -96,12 +96,6 @@ defmodule Pleroma.User do
     "#{ap_id(user)}/followers"
   end
 
-  def follow_changeset(struct, params \\ %{}) do
-    struct
-    |> cast(params, [:following])
-    |> validate_required([:following])
-  end
-
   def user_info(%User{} = user) do
     oneself = if user.local, do: 1, else: 0
 
@@ -307,10 +301,13 @@ defmodule Pleroma.User do
     end
   end
 
-  @doc "A mass follow for local users. Ignores blocks and has no side effects"
+  @doc "A mass follow for local users. Respects blocks but does not create activities."
   @spec follow_all(User.t(), list(User.t())) :: {atom(), User.t()}
   def follow_all(follower, followeds) do
-    followed_addresses = Enum.map(followeds, fn %{follower_address: fa} -> fa end)
+    followed_addresses =
+      followeds
+      |> Enum.reject(fn %{ap_id: ap_id} -> ap_id in follower.info.blocks end)
+      |> Enum.map(fn %{follower_address: fa} -> fa end)
 
     q =
       from(u in User,
index 98d3bc4641a89dde961f50a220f4c43aabd5b047..523ab1ea430256ebb3ac257aac2080262df2a8ba 100644 (file)
@@ -53,16 +53,20 @@ defmodule Pleroma.UserTest do
     followed_zero = insert(:user)
     followed_one = insert(:user)
     followed_two = insert(:user)
+    blocked = insert(:user)
     not_followed = insert(:user)
 
+    {:ok, user} = User.block(user, blocked)
+
     {:ok, user} = User.follow(user, followed_zero)
 
-    {:ok, user} = User.follow_all(user, [followed_one, followed_two])
+    {:ok, user} = User.follow_all(user, [followed_one, followed_two, blocked])
 
     assert User.following?(user, followed_one)
     assert User.following?(user, followed_two)
     assert User.following?(user, followed_zero)
     refute User.following?(user, not_followed)
+    refute User.following?(user, blocked)
   end
 
   test "follow_all follows mutliple users without duplicating" do