diff options
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 72 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 88 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 27 | ||||
| -rw-r--r-- | test/web/pleroma_api/controllers/pleroma_api_controller_test.exs | 60 | 
4 files changed, 247 insertions, 0 deletions
| diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index c9f2a92e7..b0a008671 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -726,6 +726,78 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do      end    end +  describe "react to an object" do +    test_with_mock "sends an activity to federation", Pleroma.Web.Federator, [:passthrough], [] do +      Pleroma.Config.put([:instance, :federating], true) +      user = insert(:user) +      reactor = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{"status" => "YASSSS queen slay"}) +      assert object = Object.normalize(activity) + +      {:ok, reaction_activity, _object} = ActivityPub.react_with_emoji(reactor, object, "🔥") + +      assert called(Pleroma.Web.Federator.publish(reaction_activity)) +    end + +    test "adds an emoji reaction activity to the db" do +      user = insert(:user) +      reactor = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{"status" => "YASSSS queen slay"}) +      assert object = Object.normalize(activity) + +      {:ok, reaction_activity, object} = ActivityPub.react_with_emoji(reactor, object, "🔥") + +      assert reaction_activity + +      assert reaction_activity.data["actor"] == reactor.ap_id +      assert reaction_activity.data["type"] == "EmojiReaction" +      assert reaction_activity.data["content"] == "🔥" +      assert reaction_activity.data["object"] == object.data["id"] +      assert reaction_activity.data["to"] == [User.ap_followers(reactor), activity.data["actor"]] +      assert reaction_activity.data["context"] == object.data["context"] +      assert object.data["reaction_count"] == 1 +      assert object.data["reactions"]["🔥"] == [reactor.ap_id] +    end +  end + +  describe "unreacting to an object" do +    test_with_mock "sends an activity to federation", Pleroma.Web.Federator, [:passthrough], [] do +      Pleroma.Config.put([:instance, :federating], true) +      user = insert(:user) +      reactor = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{"status" => "YASSSS queen slay"}) +      assert object = Object.normalize(activity) + +      {:ok, reaction_activity, _object} = ActivityPub.react_with_emoji(reactor, object, "🔥") + +      assert called(Pleroma.Web.Federator.publish(reaction_activity)) + +      {:ok, unreaction_activity, _object} = +        ActivityPub.unreact_with_emoji(reactor, reaction_activity.data["id"]) + +      assert called(Pleroma.Web.Federator.publish(unreaction_activity)) +    end + +    test "adds an undo activity to the db" do +      user = insert(:user) +      reactor = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{"status" => "YASSSS queen slay"}) +      assert object = Object.normalize(activity) + +      {:ok, reaction_activity, _object} = ActivityPub.react_with_emoji(reactor, object, "🔥") + +      {:ok, unreaction_activity, _object} = +        ActivityPub.unreact_with_emoji(reactor, reaction_activity.data["id"]) + +      assert unreaction_activity.actor == reactor.ap_id +      assert unreaction_activity.data["object"] == reaction_activity.data["id"] + +      object = Object.get_by_ap_id(object.data["id"]) +      assert object.data["reaction_count"] == 0 +      assert object.data["reactions"] == %{} +    end +  end +    describe "like an object" do      test_with_mock "sends an activity to federation", Pleroma.Web.Federator, [:passthrough], [] do        Pleroma.Config.put([:instance, :federating], true) diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 50c0bfb84..0bff5a57b 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -341,6 +341,80 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert data["object"] == activity.data["object"]      end +    test "it works for incoming misskey likes, turning them into EmojiReactions" do +      user = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) + +      data = +        File.read!("test/fixtures/misskey-like.json") +        |> Poison.decode!() +        |> Map.put("object", activity.data["object"]) + +      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +      assert data["actor"] == data["actor"] +      assert data["type"] == "EmojiReaction" +      assert data["id"] == data["id"] +      assert data["object"] == activity.data["object"] +      assert data["content"] == "🍮" +    end + +    test "it works for incoming misskey likes that contain unicode emojis, turning them into EmojiReactions" do +      user = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) + +      data = +        File.read!("test/fixtures/misskey-like.json") +        |> Poison.decode!() +        |> Map.put("object", activity.data["object"]) +        |> Map.put("_misskey_reaction", "⭐") + +      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +      assert data["actor"] == data["actor"] +      assert data["type"] == "EmojiReaction" +      assert data["id"] == data["id"] +      assert data["object"] == activity.data["object"] +      assert data["content"] == "⭐" +    end + +    test "it works for incoming emoji reactions" do +      user = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) + +      data = +        File.read!("test/fixtures/emoji-reaction.json") +        |> Poison.decode!() +        |> Map.put("object", activity.data["object"]) + +      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +      assert data["actor"] == "http://mastodon.example.org/users/admin" +      assert data["type"] == "EmojiReaction" +      assert data["id"] == "http://mastodon.example.org/users/admin#reactions/2" +      assert data["object"] == activity.data["object"] +      assert data["content"] == "👌" +    end + +    test "it works for incoming emoji reaction undos" do +      user = insert(:user) + +      {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) +      {:ok, reaction_activity, _object} = CommonAPI.react_with_emoji(activity.id, user, "👌") + +      data = +        File.read!("test/fixtures/mastodon-undo-like.json") +        |> Poison.decode!() +        |> Map.put("object", reaction_activity.data["id"]) +        |> Map.put("actor", user.ap_id) + +      {:ok, activity} = Transmogrifier.handle_incoming(data) + +      assert activity.actor == user.ap_id +      assert activity.data["id"] == data["id"] +      assert activity.data["type"] == "Undo" +    end +      test "it returns an error for incoming unlikes wihout a like activity" do        user = insert(:user)        {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) @@ -555,6 +629,20 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        refute Map.has_key?(object.data, "likes")      end +    test "it strips internal reactions" do +      user = insert(:user) +      {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"}) +      {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, user, "📢") + +      %{object: object} = Activity.get_by_id_with_object(activity.id) +      assert Map.has_key?(object.data, "reactions") +      assert Map.has_key?(object.data, "reaction_count") + +      object_data = Transmogrifier.strip_internal_fields(object.data) +      refute Map.has_key?(object_data, "reactions") +      refute Map.has_key?(object_data, "reaction_count") +    end +      test "it works for incoming update activities" do        data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 83df44c36..cc1d122d9 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -226,6 +226,33 @@ defmodule Pleroma.Web.CommonAPITest do    end    describe "reactions" do +    test "reacting to a status with an emoji" 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, "👍") + +      assert reaction.data["actor"] == user.ap_id +      assert reaction.data["content"] == "👍" + +      # TODO: test error case. +    end + +    test "unreacting to a status with an emoji" 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, unreaction, _} = CommonAPI.unreact_with_emoji(activity.id, user, "👍") + +      assert unreaction.data["type"] == "Undo" +      assert unreaction.data["object"] == reaction.data["id"] +    end +      test "repeating a status" do        user = insert(:user)        other_user = insert(:user) diff --git a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs index 8a6528cbb..44ea85b45 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -7,12 +7,72 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do    alias Pleroma.Conversation.Participation    alias Pleroma.Notification +  alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User    alias Pleroma.Web.CommonAPI    import Pleroma.Factory +  test "POST /api/v1/pleroma/statuses/:id/react_with_emoji", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"}) + +    result = +      conn +      |> assign(:user, other_user) +      |> post("/api/v1/pleroma/statuses/#{activity.id}/react_with_emoji", %{"emoji" => "☕"}) + +    assert %{"id" => id} = json_response(result, 200) +    assert to_string(activity.id) == id +  end + +  test "POST /api/v1/pleroma/statuses/:id/unreact_with_emoji", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"}) +    {:ok, activity, _object} = CommonAPI.react_with_emoji(activity.id, other_user, "☕") + +    result = +      conn +      |> assign(:user, other_user) +      |> post("/api/v1/pleroma/statuses/#{activity.id}/unreact_with_emoji", %{"emoji" => "☕"}) + +    assert %{"id" => id} = json_response(result, 200) +    assert to_string(activity.id) == id + +    object = Object.normalize(activity) + +    assert object.data["reaction_count"] == 0 +  end + +  test "GET /api/v1/pleroma/statuses/:id/emoji_reactions_by", %{conn: conn} do +    user = insert(:user) +    other_user = insert(:user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"}) + +    result = +      conn +      |> get("/api/v1/pleroma/statuses/#{activity.id}/emoji_reactions_by") +      |> json_response(200) + +    assert result == %{} + +    {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, other_user, "🎅") + +    result = +      conn +      |> get("/api/v1/pleroma/statuses/#{activity.id}/emoji_reactions_by") +      |> json_response(200) + +    [represented_user] = result["🎅"] +    assert represented_user["id"] == other_user.id +  end +    test "/api/v1/pleroma/conversations/:id", %{conn: conn} do      user = insert(:user)      other_user = insert(:user) | 
