commit: e914eeb632b2f51ee692ba8a94394452e10bcbe4
parent: 44913c101951a9fe423ee1f2e739204b97ba8d45
Author: kaniini <nenolod@gmail.com>
Date: Thu, 31 Jan 2019 18:50:00 +0000
Merge branch 'user-follow-all-unique' into 'develop'
User.follow_all: ensure the following array stays unique
See merge request pleroma/pleroma!750
Diffstat:
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
@@ -315,7 +315,16 @@ defmodule Pleroma.User do
q =
from(u in User,
where: u.id == ^follower.id,
- update: [set: [following: fragment("array_cat(?, ?)", u.following, ^followed_addresses)]]
+ update: [
+ set: [
+ following:
+ fragment(
+ "array(select distinct unnest (array_cat(?, ?)))",
+ u.following,
+ ^followed_addresses
+ )
+ ]
+ ]
)
{1, [follower]} = Repo.update_all(q, [], returning: true)
diff --git a/test/user_test.exs b/test/user_test.exs
@@ -65,6 +65,19 @@ defmodule Pleroma.UserTest do
refute User.following?(user, not_followed)
end
+ test "follow_all follows mutliple users without duplicating" do
+ user = insert(:user)
+ followed_zero = insert(:user)
+ followed_one = insert(:user)
+ followed_two = insert(:user)
+
+ {:ok, user} = User.follow_all(user, [followed_zero, followed_one])
+ assert length(user.following) == 3
+
+ {:ok, user} = User.follow_all(user, [followed_one, followed_two])
+ assert length(user.following) == 4
+ end
+
test "follow takes a user and another user" do
user = insert(:user)
followed = insert(:user)