User.follow_all: ensure its stays unique
This commit is contained in:
parent
44913c1019
commit
308b35ebe2
|
@ -315,7 +315,16 @@ def follow_all(follower, followeds) 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)
|
||||
|
|
|
@ -65,6 +65,19 @@ test "follow_all follows mutliple users" 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)
|
||||
|
|
Loading…
Reference in a new issue