diff options
Diffstat (limited to 'test/conversation')
| -rw-r--r-- | test/conversation/participation_test.exs | 79 | 
1 files changed, 79 insertions, 0 deletions
diff --git a/test/conversation/participation_test.exs b/test/conversation/participation_test.exs index 568953b07..a27167d42 100644 --- a/test/conversation/participation_test.exs +++ b/test/conversation/participation_test.exs @@ -8,6 +8,50 @@ defmodule Pleroma.Conversation.ParticipationTest do    alias Pleroma.Conversation.Participation    alias Pleroma.Web.CommonAPI +  test "getting a participation will also preload things" do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, _activity} = +      CommonAPI.post(user, %{"status" => "Hey @#{other_user.nickname}.", "visibility" => "direct"}) + +    [participation] = Participation.for_user(user) + +    participation = Participation.get(participation.id, preload: [:conversation]) + +    assert %Pleroma.Conversation{} = participation.conversation +  end + +  test "for a new conversation, it sets the recipents of the participation" do +    user = insert(:user) +    other_user = insert(:user) +    third_user = insert(:user) + +    {:ok, activity} = +      CommonAPI.post(user, %{"status" => "Hey @#{other_user.nickname}.", "visibility" => "direct"}) + +    [participation] = Participation.for_user(user) +    participation = Pleroma.Repo.preload(participation, :recipients) + +    assert length(participation.recipients) == 2 +    assert user in participation.recipients +    assert other_user in participation.recipients + +    # Mentioning another user in the same conversation will not add a new recipients. + +    {:ok, _activity} = +      CommonAPI.post(user, %{ +        "in_reply_to_status_id" => activity.id, +        "status" => "Hey @#{third_user.nickname}.", +        "visibility" => "direct" +      }) + +    [participation] = Participation.for_user(user) +    participation = Pleroma.Repo.preload(participation, :recipients) + +    assert length(participation.recipients) == 2 +  end +    test "it creates a participation for a conversation and a user" do      user = insert(:user)      conversation = insert(:conversation) @@ -72,8 +116,11 @@ defmodule Pleroma.Conversation.ParticipationTest do      object2 = Pleroma.Object.normalize(activity_two)      object3 = Pleroma.Object.normalize(activity_three) +    user = Repo.get(Pleroma.User, user.id) +      assert participation_one.conversation.ap_id == object3.data["context"]      assert participation_two.conversation.ap_id == object2.data["context"] +    assert participation_one.conversation.users == [user]      # Pagination      assert [participation_one] = Participation.for_user(user, %{"limit" => 1}) @@ -86,4 +133,36 @@ defmodule Pleroma.Conversation.ParticipationTest do      assert participation_one.last_activity_id == activity_three.id    end + +  test "Doesn't die when the conversation gets empty" do +    user = insert(:user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) +    [participation] = Participation.for_user_with_last_activity_id(user) + +    assert participation.last_activity_id == activity.id + +    {:ok, _} = CommonAPI.delete(activity.id, user) + +    [] = Participation.for_user_with_last_activity_id(user) +  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  | 
