Add CustomEmojiController
authorEgor Kislitsyn <egor@kislitsyn.com>
Wed, 2 Oct 2019 12:16:34 +0000 (19:16 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Wed, 2 Oct 2019 12:16:34 +0000 (19:16 +0700)
lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex [new file with mode: 0644]
lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex
lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex [new file with mode: 0644]
lib/pleroma/web/router.ex
test/web/activity_pub/transmogrifier_test.exs
test/web/mastodon_api/controllers/custom_emoji_controller_test.exs [new file with mode: 0644]
test/web/mastodon_api/mastodon_api_controller_test.exs

diff --git a/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex b/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex
new file mode 100644 (file)
index 0000000..391c064
--- /dev/null
@@ -0,0 +1,11 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.MastodonAPI.CustomEmojiController do
+  use Pleroma.Web, :controller
+
+  def index(conn, _params) do
+    render(conn, "index.json", custom_emojis: Pleroma.Emoji.get_all())
+  end
+end
index 98dd9f375654f110117636ad4446fb17a3f21eb1..a66335c0227f841499703d12c03dcc59986ccce2 100644 (file)
@@ -11,7 +11,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   alias Pleroma.Config
   alias Pleroma.Pagination
   alias Pleroma.User
-  alias Pleroma.Web
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.MastodonAPI.AccountView
@@ -22,28 +21,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
 
   action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
 
-  defp mastodonized_emoji do
-    Pleroma.Emoji.get_all()
-    |> Enum.map(fn {shortcode, %Pleroma.Emoji{file: relative_url, tags: tags}} ->
-      url = to_string(URI.merge(Web.base_url(), relative_url))
-
-      %{
-        "shortcode" => shortcode,
-        "static_url" => url,
-        "visible_in_picker" => true,
-        "url" => url,
-        "tags" => tags,
-        # Assuming that a comma is authorized in the category name
-        "category" => (tags -- ["Custom"]) |> Enum.join(",")
-      }
-    end)
-  end
-
-  def custom_emojis(conn, _params) do
-    mastodon_emoji = mastodonized_emoji()
-    json(conn, mastodon_emoji)
-  end
-
   def follows(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do
     with {_, %User{} = followed} <- {:followed, User.get_cached_by_nickname(uri)},
          {_, true} <- {:followed, follower.id != followed.id},
@@ -114,7 +91,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     token = get_session(conn, :oauth_token)
 
     if user && token do
-      mastodon_emoji = mastodonized_emoji()
+      mastodon_emoji =
+        Pleroma.Web.MastodonAPI.CustomEmojiView.render("index.json", %{
+          custom_emojis: Pleroma.Emoji.get_all()
+        })
 
       limit = Config.get([:instance, :limit])
 
diff --git a/lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex b/lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex
new file mode 100644 (file)
index 0000000..cb86889
--- /dev/null
@@ -0,0 +1,28 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.MastodonAPI.CustomEmojiView do
+  use Pleroma.Web, :view
+
+  alias Pleroma.Emoji
+  alias Pleroma.Web
+
+  def render("index.json", %{custom_emojis: custom_emojis}) do
+    render_many(custom_emojis, __MODULE__, "show.json")
+  end
+
+  def render("show.json", %{custom_emoji: {shortcode, %Emoji{file: relative_url, tags: tags}}}) do
+    url = Web.base_url() |> URI.merge(relative_url) |> to_string()
+
+    %{
+      "shortcode" => shortcode,
+      "static_url" => url,
+      "visible_in_picker" => true,
+      "url" => url,
+      "tags" => tags,
+      # Assuming that a comma is authorized in the category name
+      "category" => tags |> List.delete("Custom") |> Enum.join(",")
+    }
+  end
+end
index a355a14bdb79513b34d45971363f094e49812154..5d14c7742966a9f3379a6c4af7a7ffde5f8cf99d 100644 (file)
@@ -461,6 +461,7 @@ defmodule Pleroma.Web.Router do
     pipe_through(:api)
 
     post("/accounts", AccountController, :create)
+    get("/accounts/search", SearchController, :account_search)
 
     get("/instance", InstanceController, :show)
     get("/instance/peers", InstanceController, :peers)
@@ -468,15 +469,13 @@ defmodule Pleroma.Web.Router do
     post("/apps", AppController, :create)
     get("/apps/verify_credentials", AppController, :verify_credentials)
 
-    get("/custom_emojis", MastodonAPIController, :custom_emojis)
-
     get("/statuses/:id/card", StatusController, :card)
     get("/statuses/:id/favourited_by", StatusController, :favourited_by)
     get("/statuses/:id/reblogged_by", StatusController, :reblogged_by)
 
-    get("/trends", MastodonAPIController, :empty_array)
+    get("/custom_emojis", CustomEmojiController, :index)
 
-    get("/accounts/search", SearchController, :account_search)
+    get("/trends", MastodonAPIController, :empty_array)
 
     scope [] do
       pipe_through(:oauth_read_or_public)
index b995f0224750ffe51fe62c9404c3afe2837160f0..6c208bdc01b2d8cf431176b969a53faa2abd1e4b 100644 (file)
@@ -1084,7 +1084,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
       {:ok, announce_activity, _} = CommonAPI.repeat(activity.id, user)
 
       {:ok, modified} = Transmogrifier.prepare_outgoing(announce_activity.data)
-      object = modified["object"]
 
       assert modified["object"]["content"] == "hey"
       assert modified["object"]["actor"] == modified["object"]["attributedTo"]
diff --git a/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs b/test/web/mastodon_api/controllers/custom_emoji_controller_test.exs
new file mode 100644 (file)
index 0000000..2d988b0
--- /dev/null
@@ -0,0 +1,22 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.MastodonAPI.CustomEmojiControllerTest do
+  use Pleroma.Web.ConnCase, async: true
+
+  test "with tags", %{conn: conn} do
+    [emoji | _body] =
+      conn
+      |> get("/api/v1/custom_emojis")
+      |> json_response(200)
+
+    assert Map.has_key?(emoji, "shortcode")
+    assert Map.has_key?(emoji, "static_url")
+    assert Map.has_key?(emoji, "tags")
+    assert is_list(emoji["tags"])
+    assert Map.has_key?(emoji, "category")
+    assert Map.has_key?(emoji, "url")
+    assert Map.has_key?(emoji, "visible_in_picker")
+  end
+end
index 7a58b13dc2dedbd64f14d118fc77ed791dfc5346..e8fd4827cdac86e096e1ae5f8660e40aadd3bc28 100644 (file)
@@ -159,23 +159,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
     end
   end
 
-  describe "custom emoji" do
-    test "with tags", %{conn: conn} do
-      [emoji | _body] =
-        conn
-        |> get("/api/v1/custom_emojis")
-        |> json_response(200)
-
-      assert Map.has_key?(emoji, "shortcode")
-      assert Map.has_key?(emoji, "static_url")
-      assert Map.has_key?(emoji, "tags")
-      assert is_list(emoji["tags"])
-      assert Map.has_key?(emoji, "category")
-      assert Map.has_key?(emoji, "url")
-      assert Map.has_key?(emoji, "visible_in_picker")
-    end
-  end
-
   describe "index/2 redirections" do
     setup %{conn: conn} do
       session_opts = [