user = insert(:user)
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey"})
- context = activity.data["object"]["context"]
+ object = Pleroma.Object.normalize(activity)
+ context = object.data["context"]
conversation = Conversation.get_for_ap_id(context)
test "it creates or updates a conversation and participations for a given DM" do
har = insert(:user)
- jafnhar = insert(:user)
+ jafnhar = insert(:user, local: false)
tridi = insert(:user)
{:ok, activity} =
CommonAPI.post(har, %{"status" => "Hey @#{jafnhar.nickname}", "visibility" => "direct"})
- context = activity.data["object"]["context"]
+ object = Pleroma.Object.normalize(activity)
+ context = object.data["context"]
conversation =
Conversation.get_for_ap_id(context)
|> Repo.preload(:participations)
assert conversation
- [har_participation, jafnhar_participation] = conversation.participations
- assert har_participation.user_id == har.id
- assert jafnhar_participation.user_id == jafnhar.id
+ assert Enum.find(conversation.participations, fn %{user_id: user_id} -> har.id == user_id end)
+
+ assert Enum.find(conversation.participations, fn %{user_id: user_id} ->
+ jafnhar.id == user_id
+ end)
{:ok, activity} =
CommonAPI.post(jafnhar, %{
"in_reply_to_status_id" => activity.id
})
- context = activity.data["object"]["context"]
+ object = Pleroma.Object.normalize(activity)
+ context = object.data["context"]
conversation_two =
Conversation.get_for_ap_id(context)
assert conversation_two.id == conversation.id
- [har_participation_two, jafnhar_participation_two] = conversation_two.participations
+ assert Enum.find(conversation_two.participations, fn %{user_id: user_id} ->
+ har.id == user_id
+ end)
- assert har_participation_two.user_id == har.id
- assert jafnhar_participation_two.user_id == jafnhar.id
+ assert Enum.find(conversation_two.participations, fn %{user_id: user_id} ->
+ jafnhar.id == user_id
+ end)
{:ok, activity} =
CommonAPI.post(tridi, %{
"in_reply_to_status_id" => activity.id
})
- context = activity.data["object"]["context"]
+ object = Pleroma.Object.normalize(activity)
+ context = object.data["context"]
conversation_three =
Conversation.get_for_ap_id(context)
- |> Repo.preload(:participations)
+ |> Repo.preload([:participations, :users])
assert conversation_three.id == conversation.id
- [har_participation_three, jafnhar_participation_three, tridi_participation] =
- conversation_three.participations
+ assert Enum.find(conversation_three.participations, fn %{user_id: user_id} ->
+ har.id == user_id
+ end)
+
+ assert Enum.find(conversation_three.participations, fn %{user_id: user_id} ->
+ jafnhar.id == user_id
+ end)
+
+ assert Enum.find(conversation_three.participations, fn %{user_id: user_id} ->
+ tridi.id == user_id
+ end)
+
+ assert Enum.find(conversation_three.users, fn %{id: user_id} ->
+ har.id == user_id
+ end)
+
+ assert Enum.find(conversation_three.users, fn %{id: user_id} ->
+ jafnhar.id == user_id
+ end)
+
+ assert Enum.find(conversation_three.users, fn %{id: user_id} ->
+ tridi.id == user_id
+ end)
+ end
+
+ test "create_or_bump_for returns the conversation with participations" do
+ har = insert(:user)
+ jafnhar = insert(:user, local: false)
+
+ {:ok, activity} =
+ CommonAPI.post(har, %{"status" => "Hey @#{jafnhar.nickname}", "visibility" => "direct"})
+
+ {:ok, conversation} = Conversation.create_or_bump_for(activity)
+
+ assert length(conversation.participations) == 2
+
+ {:ok, activity} =
+ CommonAPI.post(har, %{"status" => "Hey @#{jafnhar.nickname}", "visibility" => "public"})
- assert har_participation_three.user_id == har.id
- assert jafnhar_participation_three.user_id == jafnhar.id
- assert tridi_participation.user_id == tridi.id
+ assert {:error, _} = Conversation.create_or_bump_for(activity)
end
end