Participation: Setting recipients will always add the owner.

This commit is contained in:
lain 2019-08-06 14:51:17 +02:00
parent d6fe220e32
commit a49c92f6ae
3 changed files with 26 additions and 1 deletions

View File

@ -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)

View File

@ -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

View File

@ -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