Add test to validate URLs to custom emojis are properly encoded
[akkoma] / test / pleroma / web / activity_pub / transmogrifier_test.exs
index d0bd00b58dda8c162e9f4b9da1a2c3f8f8d1b9af..aa32ebaab26a8077da0ac954d480d2b28f498bb6 100644 (file)
@@ -204,37 +204,30 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
 
       {:ok, activity} = CommonAPI.post(user, %{status: "#2hu :firefox:"})
 
-      {:ok, %{"object" => modified_object}} = Transmogrifier.prepare_outgoing(activity.data)
-
-      assert [
-               %{"name" => "#2hu", "type" => "Hashtag"},
-               %{"name" => ":firefox:", "type" => "Emoji"}
-             ] = modified_object["tag"]
-
-      refute Map.has_key?(modified_object, "hashtags")
-      refute Map.has_key?(modified_object, "emoji")
-      refute Map.has_key?(modified_object, "like_count")
-      refute Map.has_key?(modified_object, "announcements")
-      refute Map.has_key?(modified_object, "announcement_count")
-      refute Map.has_key?(modified_object, "context_id")
+      {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
+
+      assert length(modified["object"]["tag"]) == 2
+
+      assert is_nil(modified["object"]["emoji"])
+      assert is_nil(modified["object"]["like_count"])
+      assert is_nil(modified["object"]["announcements"])
+      assert is_nil(modified["object"]["announcement_count"])
+      assert is_nil(modified["object"]["context_id"])
     end
 
     test "it strips internal fields of article" do
       activity = insert(:article_activity)
 
-      {:ok, %{"object" => modified_object}} = Transmogrifier.prepare_outgoing(activity.data)
+      {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
 
-      assert [
-               %{"name" => "#2hu", "type" => "Hashtag"},
-               %{"name" => ":2hu:", "type" => "Emoji"}
-             ] = modified_object["tag"]
+      assert length(modified["object"]["tag"]) == 2
 
-      refute Map.has_key?(modified_object, "hashtags")
-      refute Map.has_key?(modified_object, "emoji")
-      refute Map.has_key?(modified_object, "like_count")
-      refute Map.has_key?(modified_object, "announcements")
-      refute Map.has_key?(modified_object, "announcement_count")
-      refute Map.has_key?(modified_object, "context_id")
+      assert is_nil(modified["object"]["emoji"])
+      assert is_nil(modified["object"]["like_count"])
+      assert is_nil(modified["object"]["announcements"])
+      assert is_nil(modified["object"]["announcement_count"])
+      assert is_nil(modified["object"]["context_id"])
+      assert is_nil(modified["object"]["likes"])
     end
 
     test "the directMessage flag is present" do
@@ -288,6 +281,21 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
 
       {:ok, _modified} = Transmogrifier.prepare_outgoing(activity.data)
     end
+
+    test "custom emoji urls are URI encoded" do
+      # :dinosaur: filename has a space -> dino walking.gif
+      user = insert(:user)
+
+      {:ok, activity} = CommonAPI.post(user, %{status: "everybody do the dinosaur :dinosaur:"})
+
+      {:ok, prepared} = Transmogrifier.prepare_outgoing(activity.data)
+
+      assert length(prepared["object"]["tag"]) == 1
+
+      url = prepared["object"]["tag"] |> List.first() |> Map.get("icon") |> Map.get("url")
+
+      assert url == "http://localhost:4001/emoji/dino%20walking.gif"
+    end
   end
 
   describe "user upgrade" do