Participation: Setting recipients will always add the owner.
This commit is contained in:
parent
d6fe220e32
commit
a49c92f6ae
@ -346,5 +346,5 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
|
|||||||
* Method `PATCH`
|
* Method `PATCH`
|
||||||
* Authentication: required
|
* Authentication: required
|
||||||
* Params:
|
* Params:
|
||||||
* `recipients`: A list of ids of users that should receive posts to this conversation.
|
* `recipients`: A list of ids of users that should receive posts to this conversation. This will replace the current list of recipients, so submit the full list. The owner of owner of the conversation will always be part of the set of recipients, though.
|
||||||
* Response: JSON, statuses (200 - healthy, 503 unhealthy)
|
* Response: JSON, statuses (200 - healthy, 503 unhealthy)
|
||||||
|
@ -101,6 +101,10 @@ def get(id) do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_recipients(participation, user_ids) do
|
def set_recipients(participation, user_ids) do
|
||||||
|
user_ids =
|
||||||
|
[participation.user_id | user_ids]
|
||||||
|
|> Enum.uniq()
|
||||||
|
|
||||||
Repo.transaction(fn ->
|
Repo.transaction(fn ->
|
||||||
query =
|
query =
|
||||||
from(r in RecipientShip,
|
from(r in RecipientShip,
|
||||||
@ -118,5 +122,7 @@ def set_recipients(participation, user_ids) do
|
|||||||
RecipientShip.create(users, participation)
|
RecipientShip.create(users, participation)
|
||||||
:ok
|
:ok
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
{:ok, Repo.preload(participation, :recipients, force: true)}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -132,4 +132,23 @@ test "Doesn't die when the conversation gets empty" do
|
|||||||
|
|
||||||
[] = Participation.for_user_with_last_activity_id(user)
|
[] = Participation.for_user_with_last_activity_id(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it sets recipients, always keeping the owner of the participation even when not explicitly set" do
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, _activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"})
|
||||||
|
[participation] = Participation.for_user_with_last_activity_id(user)
|
||||||
|
|
||||||
|
participation = Repo.preload(participation, :recipients)
|
||||||
|
|
||||||
|
assert participation.recipients |> length() == 1
|
||||||
|
assert user in participation.recipients
|
||||||
|
|
||||||
|
{:ok, participation} = Participation.set_recipients(participation, [other_user.id])
|
||||||
|
|
||||||
|
assert participation.recipients |> length() == 2
|
||||||
|
assert user in participation.recipients
|
||||||
|
assert other_user in participation.recipients
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user