diff options
Diffstat (limited to 'test/web/common_api')
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 348 | ||||
| -rw-r--r-- | test/web/common_api/common_api_utils_test.exs | 94 | 
2 files changed, 284 insertions, 158 deletions
| diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 601c32954..26e41c313 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 @@ -9,26 +9,178 @@ defmodule Pleroma.Web.CommonAPITest do    alias Pleroma.Object    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub +  alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.AdminAPI.AccountView    alias Pleroma.Web.CommonAPI    import Pleroma.Factory +  import Mock    require Pleroma.Constants -  clear_config([:instance, :safe_dm_mentions]) -  clear_config([:instance, :limit]) -  clear_config([:instance, :max_pinned_statuses]) +  setup do: clear_config([:instance, :safe_dm_mentions]) +  setup do: clear_config([:instance, :limit]) +  setup do: clear_config([:instance, :max_pinned_statuses]) + +  describe "deletion" do +    test "it works with pruned objects" do +      user = insert(:user) + +      {:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"}) + +      Object.normalize(post, false) +      |> Object.prune() + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        assert {:ok, delete} = CommonAPI.delete(post.id, user) +        assert delete.local +        assert called(Pleroma.Web.Federator.publish(delete)) +      end + +      refute Activity.get_by_id(post.id) +    end + +    test "it allows users to delete their posts" do +      user = insert(:user) + +      {:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"}) + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        assert {:ok, delete} = CommonAPI.delete(post.id, user) +        assert delete.local +        assert called(Pleroma.Web.Federator.publish(delete)) +      end + +      refute Activity.get_by_id(post.id) +    end + +    test "it does not allow a user to delete their posts" do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"}) + +      assert {:error, "Could not delete"} = CommonAPI.delete(post.id, other_user) +      assert Activity.get_by_id(post.id) +    end + +    test "it allows moderators to delete other user's posts" do +      user = insert(:user) +      moderator = insert(:user, is_moderator: true) + +      {:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"}) + +      assert {:ok, delete} = CommonAPI.delete(post.id, moderator) +      assert delete.local + +      refute Activity.get_by_id(post.id) +    end + +    test "it allows admins to delete other user's posts" do +      user = insert(:user) +      moderator = insert(:user, is_admin: true) + +      {:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"}) + +      assert {:ok, delete} = CommonAPI.delete(post.id, moderator) +      assert delete.local + +      refute Activity.get_by_id(post.id) +    end + +    test "superusers deleting non-local posts won't federate the delete" do +      # This is the user of the ingested activity +      _user = +        insert(:user, +          local: false, +          ap_id: "http://mastodon.example.org/users/admin", +          last_refreshed_at: NaiveDateTime.utc_now() +        ) + +      moderator = insert(:user, is_admin: true) + +      data = +        File.read!("test/fixtures/mastodon-post-activity.json") +        |> Jason.decode!() + +      {:ok, post} = Transmogrifier.handle_incoming(data) + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        assert {:ok, delete} = CommonAPI.delete(post.id, moderator) +        assert delete.local +        refute called(Pleroma.Web.Federator.publish(:_)) +      end + +      refute Activity.get_by_id(post.id) +    end +  end + +  test "favoriting race condition" do +    user = insert(:user) +    users_serial = insert_list(10, :user) +    users = insert_list(10, :user) + +    {:ok, activity} = CommonAPI.post(user, %{status: "."}) + +    users_serial +    |> Enum.map(fn user -> +      CommonAPI.favorite(user, activity.id) +    end) + +    object = Object.get_by_ap_id(activity.data["object"]) +    assert object.data["like_count"] == 10 + +    users +    |> Enum.map(fn user -> +      Task.async(fn -> +        CommonAPI.favorite(user, activity.id) +      end) +    end) +    |> Enum.map(&Task.await/1) + +    object = Object.get_by_ap_id(activity.data["object"]) +    assert object.data["like_count"] == 20 +  end + +  test "repeating race condition" do +    user = insert(:user) +    users_serial = insert_list(10, :user) +    users = insert_list(10, :user) + +    {:ok, activity} = CommonAPI.post(user, %{status: "."}) + +    users_serial +    |> Enum.map(fn user -> +      CommonAPI.repeat(activity.id, user) +    end) + +    object = Object.get_by_ap_id(activity.data["object"]) +    assert object.data["announcement_count"] == 10 + +    users +    |> Enum.map(fn user -> +      Task.async(fn -> +        CommonAPI.repeat(activity.id, user) +      end) +    end) +    |> Enum.map(&Task.await/1) + +    object = Object.get_by_ap_id(activity.data["object"]) +    assert object.data["announcement_count"] == 20 +  end    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"}) +    {: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}) +      CommonAPI.post(user, %{status: ".", in_reply_to_conversation_id: participation.id})      assert Visibility.is_direct?(convo_reply) @@ -42,8 +194,8 @@ defmodule Pleroma.Web.CommonAPITest do      {:ok, activity} =        CommonAPI.post(har, %{ -        "status" => "@#{jafnhar.nickname} hey", -        "visibility" => "direct" +        status: "@#{jafnhar.nickname} hey", +        visibility: "direct"        })      assert har.ap_id in activity.recipients @@ -53,10 +205,10 @@ defmodule Pleroma.Web.CommonAPITest do      {: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 +        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 @@ -73,8 +225,8 @@ defmodule Pleroma.Web.CommonAPITest do      {:ok, activity} =        CommonAPI.post(har, %{ -        "status" => "@#{jafnhar.nickname} hey, i never want to see @#{tridi.nickname} again", -        "visibility" => "direct" +        status: "@#{jafnhar.nickname} hey, i never want to see @#{tridi.nickname} again", +        visibility: "direct"        })      refute tridi.ap_id in activity.recipients @@ -83,7 +235,7 @@ defmodule Pleroma.Web.CommonAPITest do    test "it de-duplicates tags" do      user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => "#2hu #2HU"}) +    {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU"})      object = Object.normalize(activity) @@ -92,23 +244,11 @@ defmodule Pleroma.Web.CommonAPITest do    test "it adds emoji in the object" do      user = insert(:user) -    {:ok, activity} = CommonAPI.post(user, %{"status" => ":firefox:"}) +    {:ok, activity} = CommonAPI.post(user, %{status: ":firefox:"})      assert Object.normalize(activity).data["emoji"]["firefox"]    end -  test "it adds emoji when updating profiles" do -    user = insert(:user, %{name: ":firefox:"}) - -    {:ok, activity} = CommonAPI.update(user) -    user = User.get_cached_by_ap_id(user.ap_id) -    [firefox] = user.source_data["tag"] - -    assert firefox["name"] == ":firefox:" - -    assert Pleroma.Constants.as_public() in activity.recipients -  end -    describe "posting" do      test "it supports explicit addressing" do        user = insert(:user) @@ -118,9 +258,9 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, activity} =          CommonAPI.post(user, %{ -          "status" => +          status:              "Hey, I think @#{user_three.nickname} is ugly. @#{user_four.nickname} is alright though.", -          "to" => [user_two.nickname, user_four.nickname, "nonexistent"] +          to: [user_two.nickname, user_four.nickname, "nonexistent"]          })        assert user.ap_id in activity.recipients @@ -136,8 +276,8 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, activity} =          CommonAPI.post(user, %{ -          "status" => post, -          "content_type" => "text/html" +          status: post, +          content_type: "text/html"          })        object = Object.normalize(activity) @@ -152,8 +292,8 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, activity} =          CommonAPI.post(user, %{ -          "status" => post, -          "content_type" => "text/markdown" +          status: post, +          content_type: "text/markdown"          })        object = Object.normalize(activity) @@ -164,21 +304,21 @@ defmodule Pleroma.Web.CommonAPITest do      test "it does not allow replies to direct messages that are not direct messages themselves" do        user = insert(:user) -      {:ok, activity} = CommonAPI.post(user, %{"status" => "suya..", "visibility" => "direct"}) +      {:ok, activity} = CommonAPI.post(user, %{status: "suya..", visibility: "direct"})        assert {:ok, _} =                 CommonAPI.post(user, %{ -                 "status" => "suya..", -                 "visibility" => "direct", -                 "in_reply_to_status_id" => activity.id +                 status: "suya..", +                 visibility: "direct", +                 in_reply_to_status_id: activity.id                 })        Enum.each(["public", "private", "unlisted"], fn visibility ->          assert {:error, "The message visibility must be direct"} =                   CommonAPI.post(user, %{ -                   "status" => "suya..", -                   "visibility" => visibility, -                   "in_reply_to_status_id" => activity.id +                   status: "suya..", +                   visibility: visibility, +                   in_reply_to_status_id: activity.id                   })        end)      end @@ -187,8 +327,7 @@ defmodule Pleroma.Web.CommonAPITest do        user = insert(:user)        {:ok, list} = Pleroma.List.create("foo", user) -      {:ok, activity} = -        CommonAPI.post(user, %{"status" => "foobar", "visibility" => "list:#{list.id}"}) +      {:ok, activity} = CommonAPI.post(user, %{status: "foobar", visibility: "list:#{list.id}"})        assert activity.data["bcc"] == [list.ap_id]        assert activity.recipients == [list.ap_id, user.ap_id] @@ -199,16 +338,18 @@ defmodule Pleroma.Web.CommonAPITest do        user = insert(:user)        assert {:error, "Cannot post an empty status without attachments"} = -               CommonAPI.post(user, %{"status" => ""}) +               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"}) +               CommonAPI.post(user, %{status: "foobar"}) + +      assert {:ok, activity} = CommonAPI.post(user, %{status: "12345"})      end      test "it can handle activities that expire" do @@ -219,8 +360,7 @@ defmodule Pleroma.Web.CommonAPITest do          |> NaiveDateTime.truncate(:second)          |> NaiveDateTime.add(1_000_000, :second) -      assert {:ok, activity} = -               CommonAPI.post(user, %{"status" => "chai", "expires_in" => 1_000_000}) +      assert {:ok, activity} = CommonAPI.post(user, %{status: "chai", expires_in: 1_000_000})        assert expiration = Pleroma.ActivityExpiration.get_by_activity_id(activity.id)        assert expiration.scheduled_at == expires_at @@ -232,14 +372,14 @@ defmodule Pleroma.Web.CommonAPITest do        user = insert(:user)        other_user = insert(:user) -      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"}) -      {:ok, reaction, _} = CommonAPI.react_with_emoji(activity.id, user, "👍") +      {:ok, reaction} = CommonAPI.react_with_emoji(activity.id, user, "👍")        assert reaction.data["actor"] == user.ap_id        assert reaction.data["content"] == "👍" -      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"})        {:error, _} = CommonAPI.react_with_emoji(activity.id, user, ".")      end @@ -248,32 +388,43 @@ defmodule Pleroma.Web.CommonAPITest do        user = insert(:user)        other_user = insert(:user) -      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) -      {:ok, reaction, _} = CommonAPI.react_with_emoji(activity.id, user, "👍") +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"}) +      {:ok, reaction} = CommonAPI.react_with_emoji(activity.id, user, "👍") -      {:ok, unreaction, _} = CommonAPI.unreact_with_emoji(activity.id, user, "👍") +      {:ok, unreaction} = CommonAPI.unreact_with_emoji(activity.id, user, "👍")        assert unreaction.data["type"] == "Undo"        assert unreaction.data["object"] == reaction.data["id"] +      assert unreaction.local      end      test "repeating a status" do        user = insert(:user)        other_user = insert(:user) -      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"})        {:ok, %Activity{}, _} = CommonAPI.repeat(activity.id, user)      end +    test "can't repeat a repeat" do +      user = insert(:user) +      other_user = insert(:user) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"}) + +      {:ok, %Activity{} = announce, _} = CommonAPI.repeat(activity.id, other_user) + +      refute match?({:ok, %Activity{}, _}, CommonAPI.repeat(announce.id, user)) +    end +      test "repeating a status privately" do        user = insert(:user)        other_user = insert(:user) -      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"})        {:ok, %Activity{} = announce_activity, _} = -        CommonAPI.repeat(activity.id, user, %{"visibility" => "private"}) +        CommonAPI.repeat(activity.id, user, %{visibility: "private"})        assert Visibility.is_private?(announce_activity)      end @@ -282,27 +433,30 @@ defmodule Pleroma.Web.CommonAPITest do        user = insert(:user)        other_user = insert(:user) -      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) +      {:ok, post_activity} = CommonAPI.post(other_user, %{status: "cofe"}) -      {:ok, %Activity{}, _} = CommonAPI.favorite(activity.id, user) +      {:ok, %Activity{data: data}} = CommonAPI.favorite(user, post_activity.id) +      assert data["type"] == "Like" +      assert data["actor"] == user.ap_id +      assert data["object"] == post_activity.data["object"]      end      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{} = activity, object} = CommonAPI.repeat(activity.id, user) -      {:ok, ^activity, ^object} = CommonAPI.repeat(activity.id, user) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"}) +      {:ok, %Activity{} = announce, object} = CommonAPI.repeat(activity.id, user) +      {:ok, ^announce, ^object} = CommonAPI.repeat(activity.id, user)      end -    test "favoriting a status twice returns the status" 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{} = activity, object} = CommonAPI.favorite(activity.id, user) -      {:ok, ^activity, ^object} = CommonAPI.favorite(activity.id, user) +      {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe"}) +      {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) +      assert {:ok, :already_liked} = CommonAPI.favorite(user, activity.id)      end    end @@ -311,7 +465,7 @@ defmodule Pleroma.Web.CommonAPITest do        Pleroma.Config.put([:instance, :max_pinned_statuses], 1)        user = insert(:user) -      {:ok, activity} = CommonAPI.post(user, %{"status" => "HI!!!"}) +      {:ok, activity} = CommonAPI.post(user, %{status: "HI!!!"})        [user: user, activity: activity]      end @@ -328,8 +482,8 @@ defmodule Pleroma.Web.CommonAPITest do      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} +          status: "How is fediverse today?", +          poll: %{options: ["Absolutely outstanding", "Not good"], expires_in: 20}          })        assert {:ok, ^activity} = CommonAPI.pin(activity.id, user) @@ -341,7 +495,7 @@ defmodule Pleroma.Web.CommonAPITest do      end      test "unlisted statuses can be pinned", %{user: user} do -      {:ok, activity} = CommonAPI.post(user, %{"status" => "HI!!!", "visibility" => "unlisted"}) +      {:ok, activity} = CommonAPI.post(user, %{status: "HI!!!", visibility: "unlisted"})        assert {:ok, ^activity} = CommonAPI.pin(activity.id, user)      end @@ -352,7 +506,7 @@ defmodule Pleroma.Web.CommonAPITest do      end      test "max pinned statuses", %{user: user, activity: activity_one} do -      {:ok, activity_two} = CommonAPI.post(user, %{"status" => "HI!!!"}) +      {:ok, activity_two} = CommonAPI.post(user, %{status: "HI!!!"})        assert {:ok, ^activity_one} = CommonAPI.pin(activity_one.id, user) @@ -367,7 +521,9 @@ defmodule Pleroma.Web.CommonAPITest do        user = refresh_record(user) -      assert {:ok, ^activity} = CommonAPI.unpin(activity.id, user) +      id = activity.id + +      assert match?({:ok, %{id: ^id}}, CommonAPI.unpin(activity.id, user))        user = refresh_record(user) @@ -418,7 +574,7 @@ defmodule Pleroma.Web.CommonAPITest do        reporter = insert(:user)        target_user = insert(:user) -      {:ok, activity} = CommonAPI.post(target_user, %{"status" => "foobar"}) +      {:ok, activity} = CommonAPI.post(target_user, %{status: "foobar"})        reporter_ap_id = reporter.ap_id        target_ap_id = target_user.ap_id @@ -426,9 +582,9 @@ defmodule Pleroma.Web.CommonAPITest do        comment = "foobar"        report_data = %{ -        "account_id" => target_user.id, -        "comment" => comment, -        "status_ids" => [activity.id] +        account_id: target_user.id, +        comment: comment, +        status_ids: [activity.id]        }        note_obj = %{ @@ -458,9 +614,9 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, %Activity{id: report_id}} =          CommonAPI.report(reporter, %{ -          "account_id" => target_user.id, -          "comment" => "I feel offended", -          "status_ids" => [activity.id] +          account_id: target_user.id, +          comment: "I feel offended", +          status_ids: [activity.id]          })        {:ok, report} = CommonAPI.update_report_state(report_id, "resolved") @@ -479,9 +635,9 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, %Activity{id: report_id}} =          CommonAPI.report(reporter, %{ -          "account_id" => target_user.id, -          "comment" => "I feel offended", -          "status_ids" => [activity.id] +          account_id: target_user.id, +          comment: "I feel offended", +          status_ids: [activity.id]          })        assert CommonAPI.update_report_state(report_id, "test") == {:error, "Unsupported state"} @@ -493,16 +649,16 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, %Activity{id: first_report_id}} =          CommonAPI.report(reporter, %{ -          "account_id" => target_user.id, -          "comment" => "I feel offended", -          "status_ids" => [activity.id] +          account_id: target_user.id, +          comment: "I feel offended", +          status_ids: [activity.id]          })        {:ok, %Activity{id: second_report_id}} =          CommonAPI.report(reporter, %{ -          "account_id" => target_user.id, -          "comment" => "I feel very offended!", -          "status_ids" => [activity.id] +          account_id: target_user.id, +          comment: "I feel very offended!", +          status_ids: [activity.id]          })        {:ok, report_ids} = @@ -560,7 +716,7 @@ defmodule Pleroma.Web.CommonAPITest do        assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} =                 CommonAPI.follow(follower, followed) -      assert User.get_follow_state(follower, followed) == "pending" +      assert User.get_follow_state(follower, followed) == :follow_pending        assert {:ok, follower} = CommonAPI.unfollow(follower, followed)        assert User.get_follow_state(follower, followed) == nil @@ -582,7 +738,7 @@ defmodule Pleroma.Web.CommonAPITest do        assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} =                 CommonAPI.follow(follower, followed) -      assert User.get_follow_state(follower, followed) == "pending" +      assert User.get_follow_state(follower, followed) == :follow_pending        assert {:ok, follower} = CommonAPI.unfollow(follower, followed)        assert User.get_follow_state(follower, followed) == nil @@ -638,6 +794,14 @@ defmodule Pleroma.Web.CommonAPITest do        assert Repo.get(Activity, follow_activity_two.id).data["state"] == "reject"        assert Repo.get(Activity, follow_activity_three.id).data["state"] == "pending"      end + +    test "doesn't create a following relationship if the corresponding follow request doesn't exist" do +      user = insert(:user, locked: true) +      not_follower = insert(:user) +      CommonAPI.accept_follow_request(not_follower, user) + +      assert Pleroma.FollowingRelationship.following?(not_follower, user) == false +    end    end    describe "vote/3" do @@ -647,8 +811,8 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, activity} =          CommonAPI.post(user, %{ -          "status" => "Am I cute?", -          "poll" => %{"options" => ["Yes", "No"], "expires_in" => 20} +          status: "Am I cute?", +          poll: %{options: ["Yes", "No"], expires_in: 20}          })        object = Object.normalize(activity) diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 848300ef3..5708db6a4 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 @@ -7,7 +7,6 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do    alias Pleroma.Object    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.CommonAPI.Utils -  alias Pleroma.Web.Endpoint    use Pleroma.DataCase    import ExUnit.CaptureLog @@ -42,28 +41,6 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      end    end -  test "parses emoji from name and bio" do -    {:ok, user} = UserBuilder.insert(%{name: ":blank:", bio: ":firefox:"}) - -    expected = [ -      %{ -        "type" => "Emoji", -        "icon" => %{"type" => "Image", "url" => "#{Endpoint.url()}/emoji/Firefox.gif"}, -        "name" => ":firefox:" -      }, -      %{ -        "type" => "Emoji", -        "icon" => %{ -          "type" => "Image", -          "url" => "#{Endpoint.url()}/emoji/blank.png" -        }, -        "name" => ":blank:" -      } -    ] - -    assert expected == Utils.emoji_from_profile(user) -  end -    describe "format_input/3" do      test "works for bare text/plain" do        text = "hello world!" @@ -89,8 +66,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 +76,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 +95,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 +111,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 +120,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 +133,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 class="u-url mention" data-user="#{ +                 user.id +               }" href="http://foo.com/user__test" rel="ugc">@<span>user__test</span></a></span> and <span class="h-card"><a class="u-url mention" data-user="#{ +                 user.id +               }" 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 @@ -253,7 +228,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        user = insert(:user)        mentioned_user = insert(:user)        third_user = insert(:user) -      {:ok, activity} = CommonAPI.post(third_user, %{"status" => "uguu"}) +      {: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) @@ -286,7 +261,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        user = insert(:user)        mentioned_user = insert(:user)        third_user = insert(:user) -      {:ok, activity} = CommonAPI.post(third_user, %{"status" => "uguu"}) +      {: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) @@ -317,7 +292,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        user = insert(:user)        mentioned_user = insert(:user)        third_user = insert(:user) -      {:ok, activity} = CommonAPI.post(third_user, %{"status" => "uguu"}) +      {: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) @@ -347,7 +322,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        user = insert(:user)        mentioned_user = insert(:user)        third_user = insert(:user) -      {:ok, activity} = CommonAPI.post(third_user, %{"status" => "uguu"}) +      {: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) @@ -360,26 +335,6 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      end    end -  describe "get_by_id_or_ap_id/1" do -    test "get activity by id" do -      activity = insert(:note_activity) -      %Pleroma.Activity{} = note = Utils.get_by_id_or_ap_id(activity.id) -      assert note.id == activity.id -    end - -    test "get activity by ap_id" do -      activity = insert(:note_activity) -      %Pleroma.Activity{} = note = Utils.get_by_id_or_ap_id(activity.data["object"]) -      assert note.id == activity.id -    end - -    test "get activity by object when type isn't `Create` " do -      activity = insert(:like_activity) -      %Pleroma.Activity{} = like = Utils.get_by_id_or_ap_id(activity.id) -      assert like.data["object"] == activity.data["object"] -    end -  end -    describe "to_master_date/1" do      test "removes microseconds from date (NaiveDateTime)" do        assert Utils.to_masto_date(~N[2015-01-23 23:50:07.123]) == "2015-01-23T23:50:07.000Z" @@ -474,6 +429,13 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        activity = insert(:note_activity, user: user, note: object)        Pleroma.Repo.delete(object) +      obj_url = activity.data["object"] + +      Tesla.Mock.mock(fn +        %{method: :get, url: ^obj_url} -> +          %Tesla.Env{status: 404, body: ""} +      end) +        assert Utils.maybe_notify_mentioned_recipients(["test-test"], activity) == [                 "test-test"               ] @@ -501,8 +463,8 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        desc = Jason.encode!(%{object.id => "test-desc"})        assert Utils.attachments_from_ids(%{ -               "media_ids" => ["#{object.id}"], -               "descriptions" => desc +               media_ids: ["#{object.id}"], +               descriptions: desc               }) == [                 Map.merge(object.data, %{"name" => "test-desc"})               ] @@ -510,7 +472,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      test "returns attachments without descs" do        object = insert(:note) -      assert Utils.attachments_from_ids(%{"media_ids" => ["#{object.id}"]}) == [object.data] +      assert Utils.attachments_from_ids(%{media_ids: ["#{object.id}"]}) == [object.data]      end      test "returns [] when not pass media_ids" do | 
