diff options
Diffstat (limited to 'test/web/common_api')
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 92 | ||||
| -rw-r--r-- | test/web/common_api/common_api_utils_test.exs | 44 | 
2 files changed, 97 insertions, 39 deletions
| diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index d641f7478..c2ed1c789 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -1,5 +1,5 @@  # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.CommonAPITest do @@ -14,7 +14,6 @@ defmodule Pleroma.Web.CommonAPITest do    alias Pleroma.Web.CommonAPI    import Pleroma.Factory -  import ExUnit.CaptureLog    require Pleroma.Constants @@ -69,6 +68,7 @@ defmodule Pleroma.Web.CommonAPITest do      har = insert(:user)      jafnhar = insert(:user)      tridi = insert(:user) +      Pleroma.Config.put([:instance, :safe_dm_mentions], true)      {:ok, activity} = @@ -202,13 +202,15 @@ defmodule Pleroma.Web.CommonAPITest do                 CommonAPI.post(user, %{"status" => ""})      end -    test "it returns error when character limit is exceeded" do +    test "it validates character limits are correctly enforced" do        Pleroma.Config.put([:instance, :limit], 5)        user = insert(:user)        assert {:error, "The status is over the character limit"} =                 CommonAPI.post(user, %{"status" => "foobar"}) + +      assert {:ok, activity} = CommonAPI.post(user, %{"status" => "12345"})      end      test "it can handle activities that expire" do @@ -239,7 +241,9 @@ defmodule Pleroma.Web.CommonAPITest do        assert reaction.data["actor"] == user.ap_id        assert reaction.data["content"] == "👍" -      # TODO: test error case. +      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) + +      {:error, _} = CommonAPI.react_with_emoji(activity.id, user, ".")      end      test "unreacting to a status with an emoji" do @@ -288,25 +292,22 @@ defmodule Pleroma.Web.CommonAPITest do        assert data["object"] == post_activity.data["object"]      end -    test "retweeting a status twice returns an error" do +    test "retweeting a status twice returns the status" do        user = insert(:user)        other_user = insert(:user)        {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) -      {:ok, %Activity{}, _object} = CommonAPI.repeat(activity.id, user) -      {:error, _} = CommonAPI.repeat(activity.id, user) +      {:ok, %Activity{} = activity, object} = CommonAPI.repeat(activity.id, user) +      {:ok, ^activity, ^object} = CommonAPI.repeat(activity.id, user)      end -    test "favoriting a status twice returns an error" do +    test "favoriting a status twice returns ok, but without the like activity" do        user = insert(:user)        other_user = insert(:user)        {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"})        {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) - -      assert capture_log(fn -> -               assert {:error, _} = CommonAPI.favorite(user, activity.id) -             end) =~ "[error]" +      assert {:ok, :already_liked} = CommonAPI.favorite(user, activity.id)      end    end @@ -329,6 +330,21 @@ defmodule Pleroma.Web.CommonAPITest do        assert %User{pinned_activities: [^id]} = user      end +    test "pin poll", %{user: user} do +      {:ok, activity} = +        CommonAPI.post(user, %{ +          "status" => "How is fediverse today?", +          "poll" => %{"options" => ["Absolutely outstanding", "Not good"], "expires_in" => 20} +        }) + +      assert {:ok, ^activity} = CommonAPI.pin(activity.id, user) + +      id = activity.id +      user = refresh_record(user) + +      assert %User{pinned_activities: [^id]} = user +    end +      test "unlisted statuses can be pinned", %{user: user} do        {:ok, activity} = CommonAPI.post(user, %{"status" => "HI!!!", "visibility" => "unlisted"})        assert {:ok, ^activity} = CommonAPI.pin(activity.id, user) @@ -516,14 +532,14 @@ defmodule Pleroma.Web.CommonAPITest do      end      test "add a reblog mute", %{muter: muter, muted: muted} do -      {:ok, muter} = CommonAPI.hide_reblogs(muter, muted) +      {:ok, _reblog_mute} = CommonAPI.hide_reblogs(muter, muted)        assert User.showing_reblogs?(muter, muted) == false      end      test "remove a reblog mute", %{muter: muter, muted: muted} do -      {:ok, muter} = CommonAPI.hide_reblogs(muter, muted) -      {:ok, muter} = CommonAPI.show_reblogs(muter, muted) +      {:ok, _reblog_mute} = CommonAPI.hide_reblogs(muter, muted) +      {:ok, _reblog_mute} = CommonAPI.show_reblogs(muter, muted)        assert User.showing_reblogs?(muter, muted) == true      end @@ -533,7 +549,7 @@ defmodule Pleroma.Web.CommonAPITest do      test "also unsubscribes a user" do        [follower, followed] = insert_pair(:user)        {:ok, follower, followed, _} = CommonAPI.follow(follower, followed) -      {:ok, followed} = User.subscribe(follower, followed) +      {:ok, _subscription} = User.subscribe(follower, followed)        assert User.subscribed_to?(follower, followed) @@ -541,6 +557,50 @@ defmodule Pleroma.Web.CommonAPITest do        refute User.subscribed_to?(follower, followed)      end + +    test "cancels a pending follow for a local user" do +      follower = insert(:user) +      followed = insert(:user, locked: true) + +      assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} = +               CommonAPI.follow(follower, followed) + +      assert User.get_follow_state(follower, followed) == "pending" +      assert {:ok, follower} = CommonAPI.unfollow(follower, followed) +      assert User.get_follow_state(follower, followed) == nil + +      assert %{id: ^activity_id, data: %{"state" => "cancelled"}} = +               Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, followed) + +      assert %{ +               data: %{ +                 "type" => "Undo", +                 "object" => %{"type" => "Follow", "state" => "cancelled"} +               } +             } = Pleroma.Web.ActivityPub.Utils.fetch_latest_undo(follower) +    end + +    test "cancels a pending follow for a remote user" do +      follower = insert(:user) +      followed = insert(:user, locked: true, local: false, ap_enabled: true) + +      assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} = +               CommonAPI.follow(follower, followed) + +      assert User.get_follow_state(follower, followed) == "pending" +      assert {:ok, follower} = CommonAPI.unfollow(follower, followed) +      assert User.get_follow_state(follower, followed) == nil + +      assert %{id: ^activity_id, data: %{"state" => "cancelled"}} = +               Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, followed) + +      assert %{ +               data: %{ +                 "type" => "Undo", +                 "object" => %{"type" => "Follow", "state" => "cancelled"} +               } +             } = Pleroma.Web.ActivityPub.Utils.fetch_latest_undo(follower) +    end    end    describe "accept_follow_request/2" do diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 2588898d0..45fc94522 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -1,5 +1,5 @@  # Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.CommonAPI.UtilsTest do @@ -89,8 +89,8 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        assert output == expected -      text = "<p>hello world!</p>\n\n<p>second paragraph</p>" -      expected = "<p>hello world!</p>\n\n<p>second paragraph</p>" +      text = "<p>hello world!</p><br/>\n<p>second paragraph</p>" +      expected = "<p>hello world!</p><br/>\n<p>second paragraph</p>"        {output, [], []} = Utils.format_input(text, "text/html") @@ -99,14 +99,14 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      test "works for bare text/markdown" do        text = "**hello world**" -      expected = "<p><strong>hello world</strong></p>\n" +      expected = "<p><strong>hello world</strong></p>"        {output, [], []} = Utils.format_input(text, "text/markdown")        assert output == expected        text = "**hello world**\n\n*another paragraph*" -      expected = "<p><strong>hello world</strong></p>\n<p><em>another paragraph</em></p>\n" +      expected = "<p><strong>hello world</strong></p><p><em>another paragraph</em></p>"        {output, [], []} = Utils.format_input(text, "text/markdown") @@ -118,7 +118,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        by someone        """ -      expected = "<blockquote><p>cool quote</p>\n</blockquote>\n<p>by someone</p>\n" +      expected = "<blockquote><p>cool quote</p></blockquote><p>by someone</p>"        {output, [], []} = Utils.format_input(text, "text/markdown") @@ -134,7 +134,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        assert output == expected        text = "[b]hello world![/b]\n\nsecond paragraph!" -      expected = "<strong>hello world!</strong><br>\n<br>\nsecond paragraph!" +      expected = "<strong>hello world!</strong><br><br>second paragraph!"        {output, [], []} = Utils.format_input(text, "text/bbcode") @@ -143,7 +143,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        text = "[b]hello world![/b]\n\n<strong>second paragraph!</strong>"        expected = -        "<strong>hello world!</strong><br>\n<br>\n<strong>second paragraph!</strong>" +        "<strong>hello world!</strong><br><br><strong>second paragraph!</strong>"        {output, [], []} = Utils.format_input(text, "text/bbcode") @@ -156,16 +156,14 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        text = "**hello world**\n\n*another @user__test and @user__test google.com paragraph*" -      expected = -        ~s(<p><strong>hello world</strong></p>\n<p><em>another <span class="h-card"><a data-user="#{ -          user.id -        }" class="u-url mention" href="http://foo.com/user__test" rel="ugc">@<span>user__test</span></a></span> and <span class="h-card"><a data-user="#{ -          user.id -        }" class="u-url mention" href="http://foo.com/user__test" rel="ugc">@<span>user__test</span></a></span> <a href="http://google.com" rel="ugc">google.com</a> paragraph</em></p>\n) -        {output, _, _} = Utils.format_input(text, "text/markdown") -      assert output == expected +      assert output == +               ~s(<p><strong>hello world</strong></p><p><em>another <span class="h-card"><a data-user="#{ +                 user.id +               }" class="u-url mention" href="http://foo.com/user__test" rel="ugc">@<span>user__test</span></a></span> and <span class="h-card"><a data-user="#{ +                 user.id +               }" class="u-url mention" href="http://foo.com/user__test" rel="ugc">@<span>user__test</span></a></span> <a href="http://google.com" rel="ugc">google.com</a> paragraph</em></p>)      end    end @@ -307,7 +305,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "private", nil)        assert length(to) == 2 -      assert length(cc) == 0 +      assert Enum.empty?(cc)        assert mentioned_user.ap_id in to        assert user.follower_address in to @@ -323,7 +321,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "private", nil)        assert length(to) == 3 -      assert length(cc) == 0 +      assert Enum.empty?(cc)        assert mentioned_user.ap_id in to        assert third_user.ap_id in to @@ -338,7 +336,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "direct", nil)        assert length(to) == 1 -      assert length(cc) == 0 +      assert Enum.empty?(cc)        assert mentioned_user.ap_id in to      end @@ -353,7 +351,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "direct", nil)        assert length(to) == 2 -      assert length(cc) == 0 +      assert Enum.empty?(cc)        assert mentioned_user.ap_id in to        assert third_user.ap_id in to @@ -575,11 +573,11 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do    end    describe "maybe_add_attachments/3" do -    test "returns parsed results when no_links is true" do +    test "returns parsed results when attachment_links is false" do        assert Utils.maybe_add_attachments(                 {"test", [], ["tags"]},                 [], -               true +               false               ) == {"test", [], ["tags"]}      end @@ -589,7 +587,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        assert Utils.maybe_add_attachments(                 {"test", [], ["tags"]},                 [attachment], -               false +               true               ) == {                 "test<br><a href=\"SakuraPM.png\" class='attachment'>SakuraPM.png</a>",                 [], | 
