API compatibility with fedibird, frontend config (#163)
[akkoma] / test / pleroma / web / pleroma_api / controllers / emoji_reaction_controller_test.exs
index 3deab30d1678a659840d9e88f07677b77a5196b9..4898179e64e6d38cd06059a054af1489b3786c54 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
@@ -31,7 +31,38 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
     assert to_string(activity.id) == id
 
     assert result["pleroma"]["emoji_reactions"] == [
-             %{"name" => "☕", "count" => 1, "me" => true}
+             %{
+               "name" => "☕",
+               "count" => 1,
+               "me" => true,
+               "url" => nil,
+               "account_ids" => [other_user.id]
+             }
+           ]
+
+    {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"})
+
+    ObanHelpers.perform_all()
+    # Reacting with a custom emoji
+    result =
+      conn
+      |> assign(:user, other_user)
+      |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["write:statuses"]))
+      |> put("/api/v1/pleroma/statuses/#{activity.id}/reactions/:dinosaur:")
+      |> json_response_and_validate_schema(200)
+
+    # We return the status, but this our implementation detail.
+    assert %{"id" => id} = result
+    assert to_string(activity.id) == id
+
+    assert result["pleroma"]["emoji_reactions"] == [
+             %{
+               "name" => "dinosaur",
+               "count" => 1,
+               "me" => true,
+               "url" => "http://localhost:4001/emoji/dino walking.gif",
+               "account_ids" => [other_user.id]
+             }
            ]
 
     # Reacting with a non-emoji
@@ -48,6 +79,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
 
     {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"})
     {:ok, _reaction_activity} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")
+    {:ok, _reaction_activity} = CommonAPI.react_with_emoji(activity.id, other_user, ":dinosaur:")
 
     ObanHelpers.perform_all()
 
@@ -60,6 +92,17 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
     assert %{"id" => id} = json_response_and_validate_schema(result, 200)
     assert to_string(activity.id) == id
 
+    # Remove custom emoji
+
+    result =
+      conn
+      |> assign(:user, other_user)
+      |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["write:statuses"]))
+      |> delete("/api/v1/pleroma/statuses/#{activity.id}/reactions/:dinosaur:")
+
+    assert %{"id" => id} = json_response_and_validate_schema(result, 200)
+    assert to_string(activity.id) == id
+
     ObanHelpers.perform_all()
 
     object = Object.get_by_ap_id(activity.data["object"])
@@ -106,6 +149,48 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
              result
   end
 
+  test "GET /api/v1/pleroma/statuses/:id/reactions?with_muted=true", %{conn: conn} do
+    user = insert(:user)
+    user2 = insert(:user)
+    user3 = insert(:user)
+
+    token = insert(:oauth_token, user: user, scopes: ["read:statuses"])
+
+    {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"})
+
+    {:ok, _} = CommonAPI.react_with_emoji(activity.id, user2, "🎅")
+    {:ok, _} = CommonAPI.react_with_emoji(activity.id, user3, "🎅")
+
+    result =
+      conn
+      |> assign(:user, user)
+      |> assign(:token, token)
+      |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")
+      |> json_response_and_validate_schema(200)
+
+    assert [%{"name" => "🎅", "count" => 2}] = result
+
+    User.mute(user, user3)
+
+    result =
+      conn
+      |> assign(:user, user)
+      |> assign(:token, token)
+      |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")
+      |> json_response_and_validate_schema(200)
+
+    assert [%{"name" => "🎅", "count" => 1}] = result
+
+    result =
+      conn
+      |> assign(:user, user)
+      |> assign(:token, token)
+      |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions?with_muted=true")
+      |> json_response_and_validate_schema(200)
+
+    assert [%{"name" => "🎅", "count" => 2}] = result
+  end
+
   test "GET /api/v1/pleroma/statuses/:id/reactions with :show_reactions disabled", %{conn: conn} do
     clear_config([:instance, :show_reactions], false)
 
@@ -139,7 +224,15 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
     {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "🎅")
     {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")
 
-    assert [%{"name" => "🎅", "count" => 1, "accounts" => [represented_user], "me" => false}] =
+    assert [
+             %{
+               "name" => "🎅",
+               "count" => 1,
+               "accounts" => [represented_user],
+               "me" => false,
+               "url" => nil
+             }
+           ] =
              conn
              |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions/🎅")
              |> json_response_and_validate_schema(200)