diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/conversation/participation_test.exs | 63 | ||||
| -rw-r--r-- | test/user_test.exs | 11 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 23 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 45 | ||||
| -rw-r--r-- | test/web/common_api/common_api_utils_test.exs | 16 | ||||
| -rw-r--r-- | test/web/mastodon_api/conversation_view_test.exs | 34 | ||||
| -rw-r--r-- | test/web/mastodon_api/status_view_test.exs | 18 | ||||
| -rw-r--r-- | test/web/pleroma_api/pleroma_api_controller_test.exs | 94 | ||||
| -rw-r--r-- | test/web/streamer_test.exs | 20 | 
9 files changed, 315 insertions, 9 deletions
| diff --git a/test/conversation/participation_test.exs b/test/conversation/participation_test.exs index 2a03e5d67..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) @@ -102,4 +146,23 @@ defmodule Pleroma.Conversation.ParticipationTest do      [] = 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 diff --git a/test/user_test.exs b/test/user_test.exs index 3861cadac..8cb6567a1 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -90,6 +90,17 @@ defmodule Pleroma.UserTest do      assert activity    end +  test "clears follow requests when requester is blocked" do +    followed = insert(:user, %{info: %{locked: true}}) +    follower = insert(:user) + +    CommonAPI.follow(follower, followed) +    assert {:ok, [_activity]} = User.get_follow_requests(followed) + +    {:ok, _follower} = User.block(followed, follower) +    assert {:ok, []} = User.get_follow_requests(followed) +  end +    test "follow_all follows mutliple users" do      user = insert(:user)      followed_zero = insert(:user) diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index d723f331f..f20cd2840 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -538,6 +538,29 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do      assert Enum.member?(activities, activity_one)    end +  test "doesn't return thread muted activities" do +    user = insert(:user) +    _activity_one = insert(:note_activity) +    note_two = insert(:note, data: %{"context" => "suya.."}) +    activity_two = insert(:note_activity, note: note_two) + +    {:ok, _activity_two} = CommonAPI.add_mute(user, activity_two) + +    assert [_activity_one] = ActivityPub.fetch_activities([], %{"muting_user" => user}) +  end + +  test "returns thread muted activities when with_muted is set" do +    user = insert(:user) +    _activity_one = insert(:note_activity) +    note_two = insert(:note, data: %{"context" => "suya.."}) +    activity_two = insert(:note_activity, note: note_two) + +    {:ok, activity_two} = CommonAPI.add_mute(user, activity_two) + +    assert [_activity_two, _activity_one] = +             ActivityPub.fetch_activities([], %{"muting_user" => user, "with_muted" => true}) +  end +    test "does include announces on request" do      activity_three = insert(:note_activity)      user = insert(:user) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 16b3f121d..454523349 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -5,13 +5,58 @@  defmodule Pleroma.Web.CommonAPITest do    use Pleroma.DataCase    alias Pleroma.Activity +  alias Pleroma.Conversation.Participation    alias Pleroma.Object    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.CommonAPI    import Pleroma.Factory +  test "when replying to a conversation / participation, it will set the correct context id even if no explicit reply_to is given" do +    user = insert(:user) +    {:ok, activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) + +    [participation] = Participation.for_user(user) + +    {:ok, convo_reply} = +      CommonAPI.post(user, %{"status" => ".", "in_reply_to_conversation_id" => participation.id}) + +    assert Visibility.is_direct?(convo_reply) + +    assert activity.data["context"] == convo_reply.data["context"] +  end + +  test "when replying to a conversation / participation, it only mentions the recipients explicitly declared in the participation" do +    har = insert(:user) +    jafnhar = insert(:user) +    tridi = insert(:user) + +    {:ok, activity} = +      CommonAPI.post(har, %{ +        "status" => "@#{jafnhar.nickname} hey", +        "visibility" => "direct" +      }) + +    assert har.ap_id in activity.recipients +    assert jafnhar.ap_id in activity.recipients + +    [participation] = Participation.for_user(har) + +    {:ok, activity} = +      CommonAPI.post(har, %{ +        "status" => "I don't really like @#{tridi.nickname}", +        "visibility" => "direct", +        "in_reply_to_status_id" => activity.id, +        "in_reply_to_conversation_id" => participation.id +      }) + +    assert har.ap_id in activity.recipients +    assert jafnhar.ap_id in activity.recipients +    refute tridi.ap_id in activity.recipients +  end +    test "with the safe_dm_mention option set, it does not mention people beyond the initial tags" do      har = insert(:user)      jafnhar = insert(:user) diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 5989d7d29..c281dd1f1 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -239,7 +239,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        mentioned_user = insert(:user)        mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "public") +      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "public", nil)        assert length(to) == 2        assert length(cc) == 1 @@ -256,7 +256,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {:ok, activity} = CommonAPI.post(third_user, %{"status" => "uguu"})        mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "public") +      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "public", nil)        assert length(to) == 3        assert length(cc) == 1 @@ -272,7 +272,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        mentioned_user = insert(:user)        mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "unlisted") +      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "unlisted", nil)        assert length(to) == 2        assert length(cc) == 1 @@ -289,7 +289,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {:ok, activity} = CommonAPI.post(third_user, %{"status" => "uguu"})        mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "unlisted") +      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "unlisted", nil)        assert length(to) == 3        assert length(cc) == 1 @@ -305,7 +305,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        mentioned_user = insert(:user)        mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "private") +      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "private", nil)        assert length(to) == 2        assert length(cc) == 0 @@ -320,7 +320,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {:ok, activity} = CommonAPI.post(third_user, %{"status" => "uguu"})        mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "private") +      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "private", nil)        assert length(to) == 3        assert length(cc) == 0 @@ -335,7 +335,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        mentioned_user = insert(:user)        mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "direct") +      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "direct", nil)        assert length(to) == 1        assert length(cc) == 0 @@ -350,7 +350,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {:ok, activity} = CommonAPI.post(third_user, %{"status" => "uguu"})        mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "direct") +      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "direct", nil)        assert length(to) == 2        assert length(cc) == 0 diff --git a/test/web/mastodon_api/conversation_view_test.exs b/test/web/mastodon_api/conversation_view_test.exs new file mode 100644 index 000000000..a2a880705 --- /dev/null +++ b/test/web/mastodon_api/conversation_view_test.exs @@ -0,0 +1,34 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.ConversationViewTest do +  use Pleroma.DataCase + +  alias Pleroma.Conversation.Participation +  alias Pleroma.Web.CommonAPI +  alias Pleroma.Web.MastodonAPI.ConversationView + +  import Pleroma.Factory + +  test "represents a Mastodon Conversation entity" do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, activity} = +      CommonAPI.post(user, %{"status" => "hey @#{other_user.nickname}", "visibility" => "direct"}) + +    [participation] = Participation.for_user_with_last_activity_id(user) + +    assert participation + +    conversation = +      ConversationView.render("participation.json", %{participation: participation, for: user}) + +    assert conversation.id == participation.id |> to_string() +    assert conversation.last_status.id == activity.id + +    assert [account] = conversation.accounts +    assert account.id == other_user.id +  end +end diff --git a/test/web/mastodon_api/status_view_test.exs b/test/web/mastodon_api/status_view_test.exs index 0b167f839..c983b494f 100644 --- a/test/web/mastodon_api/status_view_test.exs +++ b/test/web/mastodon_api/status_view_test.exs @@ -23,6 +23,21 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      :ok    end +  test "returns the direct conversation id when given the `with_conversation_id` option" do +    user = insert(:user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"}) + +    status = +      StatusView.render("status.json", +        activity: activity, +        with_direct_conversation_id: true, +        for: user +      ) + +    assert status[:pleroma][:direct_conversation_id] +  end +    test "returns a temporary ap_id based user for activities missing db users" do      user = insert(:user) @@ -133,7 +148,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do          conversation_id: convo_id,          in_reply_to_account_acct: nil,          content: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["content"])}, -        spoiler_text: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["summary"])} +        spoiler_text: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["summary"])}, +        direct_conversation_id: nil        }      } diff --git a/test/web/pleroma_api/pleroma_api_controller_test.exs b/test/web/pleroma_api/pleroma_api_controller_test.exs new file mode 100644 index 000000000..ed6b79727 --- /dev/null +++ b/test/web/pleroma_api/pleroma_api_controller_test.exs @@ -0,0 +1,94 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do +  use Pleroma.Web.ConnCase + +  alias Pleroma.Conversation.Participation +  alias Pleroma.Repo +  alias Pleroma.Web.CommonAPI + +  import Pleroma.Factory + +  test "/api/v1/pleroma/conversations/:id", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, _activity} = +      CommonAPI.post(user, %{"status" => "Hi @#{other_user.nickname}!", "visibility" => "direct"}) + +    [participation] = Participation.for_user(other_user) + +    result = +      conn +      |> assign(:user, other_user) +      |> get("/api/v1/pleroma/conversations/#{participation.id}") +      |> json_response(200) + +    assert result["id"] == participation.id |> to_string() +  end + +  test "/api/v1/pleroma/conversations/:id/statuses", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) +    third_user = insert(:user) + +    {:ok, _activity} = +      CommonAPI.post(user, %{"status" => "Hi @#{third_user.nickname}!", "visibility" => "direct"}) + +    {:ok, activity} = +      CommonAPI.post(user, %{"status" => "Hi @#{other_user.nickname}!", "visibility" => "direct"}) + +    [participation] = Participation.for_user(other_user) + +    {:ok, activity_two} = +      CommonAPI.post(other_user, %{ +        "status" => "Hi!", +        "in_reply_to_status_id" => activity.id, +        "in_reply_to_conversation_id" => participation.id +      }) + +    result = +      conn +      |> assign(:user, other_user) +      |> get("/api/v1/pleroma/conversations/#{participation.id}/statuses") +      |> json_response(200) + +    assert length(result) == 2 + +    id_one = activity.id +    id_two = activity_two.id +    assert [%{"id" => ^id_one}, %{"id" => ^id_two}] = result +  end + +  test "PATCH /api/v1/pleroma/conversations/:id", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, _activity} = CommonAPI.post(user, %{"status" => "Hi", "visibility" => "direct"}) + +    [participation] = Participation.for_user(user) + +    participation = Repo.preload(participation, :recipients) + +    assert [user] == participation.recipients +    assert other_user not in participation.recipients + +    result = +      conn +      |> assign(:user, user) +      |> patch("/api/v1/pleroma/conversations/#{participation.id}", %{ +        "recipients" => [user.id, other_user.id] +      }) +      |> json_response(200) + +    assert result["id"] == participation.id |> to_string + +    [participation] = Participation.for_user(user) +    participation = Repo.preload(participation, :recipients) + +    assert user in participation.recipients +    assert other_user in participation.recipients +  end +end diff --git a/test/web/streamer_test.exs b/test/web/streamer_test.exs index d47b37efb..5b7fe44d4 100644 --- a/test/web/streamer_test.exs +++ b/test/web/streamer_test.exs @@ -414,6 +414,26 @@ defmodule Pleroma.Web.StreamerTest do      Task.await(task)    end +  test "it doesn't send posts from muted threads" do +    user = insert(:user) +    user2 = insert(:user) +    {:ok, user2, user, _activity} = CommonAPI.follow(user2, user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"}) + +    {:ok, activity} = CommonAPI.add_mute(user2, activity) + +    task = Task.async(fn -> refute_receive {:text, _}, 4_000 end) + +    Streamer.add_socket( +      "user", +      %{transport_pid: task.pid, assigns: %{user: user2}} +    ) + +    Streamer.stream("user", activity) +    Task.await(task) +  end +    describe "direct streams" do      setup do        GenServer.start(Streamer, %{}, name: Streamer) | 
