diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/pleroma/web/common_api/utils_test.exs | 94 | ||||
| -rw-r--r-- | test/pleroma/web/common_api_test.exs | 124 | ||||
| -rw-r--r-- | test/pleroma/web/mastodon_api/controllers/status_controller_test.exs | 19 | ||||
| -rw-r--r-- | test/pleroma/web/mastodon_api/views/status_view_test.exs | 3 | 
4 files changed, 208 insertions, 32 deletions
| diff --git a/test/pleroma/web/common_api/utils_test.exs b/test/pleroma/web/common_api/utils_test.exs index e67c10b93..4d6c9ea26 100644 --- a/test/pleroma/web/common_api/utils_test.exs +++ b/test/pleroma/web/common_api/utils_test.exs @@ -6,6 +6,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do    alias Pleroma.Builders.UserBuilder    alias Pleroma.Object    alias Pleroma.Web.CommonAPI +  alias Pleroma.Web.CommonAPI.ActivityDraft    alias Pleroma.Web.CommonAPI.Utils    use Pleroma.DataCase @@ -235,9 +236,9 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      test "for public posts, not a reply" do        user = insert(:user)        mentioned_user = insert(:user) -      mentions = [mentioned_user.ap_id] +      draft = %ActivityDraft{user: user, mentions: [mentioned_user.ap_id], visibility: "public"} -      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "public", nil) +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 2        assert length(cc) == 1 @@ -252,9 +253,15 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        mentioned_user = insert(:user)        third_user = insert(:user)        {:ok, activity} = CommonAPI.post(third_user, %{status: "uguu"}) -      mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "public", nil) +      draft = %ActivityDraft{ +        user: user, +        mentions: [mentioned_user.ap_id], +        visibility: "public", +        in_reply_to: activity +      } + +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 3        assert length(cc) == 1 @@ -268,9 +275,9 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      test "for unlisted posts, not a reply" do        user = insert(:user)        mentioned_user = insert(:user) -      mentions = [mentioned_user.ap_id] +      draft = %ActivityDraft{user: user, mentions: [mentioned_user.ap_id], visibility: "unlisted"} -      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "unlisted", nil) +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 2        assert length(cc) == 1 @@ -285,9 +292,15 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        mentioned_user = insert(:user)        third_user = insert(:user)        {:ok, activity} = CommonAPI.post(third_user, %{status: "uguu"}) -      mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "unlisted", nil) +      draft = %ActivityDraft{ +        user: user, +        mentions: [mentioned_user.ap_id], +        visibility: "unlisted", +        in_reply_to: activity +      } + +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 3        assert length(cc) == 1 @@ -301,9 +314,9 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      test "for private posts, not a reply" do        user = insert(:user)        mentioned_user = insert(:user) -      mentions = [mentioned_user.ap_id] +      draft = %ActivityDraft{user: user, mentions: [mentioned_user.ap_id], visibility: "private"} -      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "private", nil) +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 2        assert Enum.empty?(cc) @@ -316,9 +329,15 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        mentioned_user = insert(:user)        third_user = insert(:user)        {:ok, activity} = CommonAPI.post(third_user, %{status: "uguu"}) -      mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "private", nil) +      draft = %ActivityDraft{ +        user: user, +        mentions: [mentioned_user.ap_id], +        visibility: "private", +        in_reply_to: activity +      } + +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 2        assert Enum.empty?(cc) @@ -330,9 +349,9 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      test "for direct posts, not a reply" do        user = insert(:user)        mentioned_user = insert(:user) -      mentions = [mentioned_user.ap_id] +      draft = %ActivityDraft{user: user, mentions: [mentioned_user.ap_id], visibility: "direct"} -      {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "direct", nil) +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 1        assert Enum.empty?(cc) @@ -345,9 +364,15 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        mentioned_user = insert(:user)        third_user = insert(:user)        {:ok, activity} = CommonAPI.post(third_user, %{status: "uguu"}) -      mentions = [mentioned_user.ap_id] -      {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "direct", nil) +      draft = %ActivityDraft{ +        user: user, +        mentions: [mentioned_user.ap_id], +        visibility: "direct", +        in_reply_to: activity +      } + +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 1        assert Enum.empty?(cc) @@ -356,7 +381,14 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {:ok, direct_activity} = CommonAPI.post(third_user, %{status: "uguu", visibility: "direct"}) -      {to, cc} = Utils.get_to_and_cc(user, mentions, direct_activity, "direct", nil) +      draft = %ActivityDraft{ +        user: user, +        mentions: [mentioned_user.ap_id], +        visibility: "direct", +        in_reply_to: direct_activity +      } + +      {to, cc} = Utils.get_to_and_cc(draft)        assert length(to) == 2        assert Enum.empty?(cc) @@ -532,26 +564,26 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      end    end -  describe "make_note_data/11" do +  describe "make_note_data/1" do      test "returns note data" do        user = insert(:user)        note = insert(:note)        user2 = insert(:user)        user3 = insert(:user) -      assert Utils.make_note_data( -               user.ap_id, -               [user2.ap_id], -               "2hu", -               "<h1>This is :moominmamma: note</h1>", -               [], -               note.id, -               [name: "jimm"], -               "test summary", -               [user3.ap_id], -               false, -               %{"custom_tag" => "test"} -             ) == %{ +      draft = %ActivityDraft{ +        user: user, +        to: [user2.ap_id], +        context: "2hu", +        content_html: "<h1>This is :moominmamma: note</h1>", +        in_reply_to: note.id, +        tags: [name: "jimm"], +        summary: "test summary", +        cc: [user3.ap_id], +        extra: %{"custom_tag" => "test"} +      } + +      assert Utils.make_note_data(draft) == %{                 "actor" => user.ap_id,                 "attachment" => [],                 "cc" => [user3.ap_id], diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index f5d09f396..a5d395558 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -1241,4 +1241,128 @@ defmodule Pleroma.Web.CommonAPITest do               } = CommonAPI.get_user("")      end    end + +  describe "with `local_only` enabled" do +    setup do: clear_config([:instance, :federating], true) + +    test "post" do +      user = insert(:user) + +      with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do +        {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", local_only: true}) + +        assert Activity.local_only?(activity) +        assert_not_called(Pleroma.Web.Federator.publish(activity)) +      end +    end + +    test "delete" do +      user = insert(:user) + +      {:ok, %Activity{id: activity_id}} = +        CommonAPI.post(user, %{status: "#2hu #2HU", local_only: true}) + +      with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do +        assert {:ok, %Activity{data: %{"deleted_activity_id" => ^activity_id}} = activity} = +                 CommonAPI.delete(activity_id, user) + +        assert Activity.local_only?(activity) +        assert_not_called(Pleroma.Web.Federator.publish(activity)) +      end +    end + +    test "repeat" do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, %Activity{id: activity_id}} = +        CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + +      with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do +        assert {:ok, %Activity{data: %{"type" => "Announce"}} = activity} = +                 CommonAPI.repeat(activity_id, user) + +        assert Activity.local_only?(activity) +        refute called(Pleroma.Web.Federator.publish(activity)) +      end +    end + +    test "unrepeat" do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, %Activity{id: activity_id}} = +        CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + +      assert {:ok, _} = CommonAPI.repeat(activity_id, user) + +      with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do +        assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = +                 CommonAPI.unrepeat(activity_id, user) + +        assert Activity.local_only?(activity) +        refute called(Pleroma.Web.Federator.publish(activity)) +      end +    end + +    test "favorite" do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + +      with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do +        assert {:ok, %Activity{data: %{"type" => "Like"}} = activity} = +                 CommonAPI.favorite(user, activity.id) + +        assert Activity.local_only?(activity) +        refute called(Pleroma.Web.Federator.publish(activity)) +      end +    end + +    test "unfavorite" do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + +      {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) + +      with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do +        assert {:ok, activity} = CommonAPI.unfavorite(activity.id, user) +        assert Activity.local_only?(activity) +        refute called(Pleroma.Web.Federator.publish(activity)) +      end +    end + +    test "react_with_emoji" do +      user = insert(:user) +      other_user = insert(:user) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + +      with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do +        assert {:ok, %Activity{data: %{"type" => "EmojiReact"}} = activity} = +                 CommonAPI.react_with_emoji(activity.id, user, "👍") + +        assert Activity.local_only?(activity) +        refute called(Pleroma.Web.Federator.publish(activity)) +      end +    end + +    test "unreact_with_emoji" do +      user = insert(:user) +      other_user = insert(:user) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + +      {:ok, _reaction} = CommonAPI.react_with_emoji(activity.id, user, "👍") + +      with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do +        assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = +                 CommonAPI.unreact_with_emoji(activity.id, user, "👍") + +        assert Activity.local_only?(activity) +        refute called(Pleroma.Web.Federator.publish(activity)) +      end +    end +  end  end diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 61359214a..4acf7a18e 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1740,4 +1740,23 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do               |> get("/api/v1/statuses/#{activity.id}")               |> json_response_and_validate_schema(:ok)    end + +  test "posting a local only status" do +    %{user: _user, conn: conn} = oauth_access(["write:statuses"]) + +    conn_one = +      conn +      |> put_req_header("content-type", "application/json") +      |> post("/api/v1/statuses", %{ +        "status" => "cofe", +        "local_only" => "true" +      }) + +    local = Pleroma.Constants.as_local_public() + +    assert %{"content" => "cofe", "id" => id, "pleroma" => %{"local_only" => true}} = +             json_response(conn_one, 200) + +    assert %Activity{id: ^id, data: %{"to" => [^local]}} = Activity.get_by_id(id) +  end  end diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index 70d829979..03b0cdf15 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -245,7 +245,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do          direct_conversation_id: nil,          thread_muted: false,          emoji_reactions: [], -        parent_visible: false +        parent_visible: false, +        local_only: false        }      } | 
