Merge branch 'bugfix/bridgy-user-icon' into 'develop'
[akkoma] / test / pleroma / web / activity_pub / transmogrifier / note_handling_test.exs
index 2428bf0bf779648c092fe8a7e440b6ef293e2b56..deb956410f3fa5544e02d1080303908eecc9d5cb 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.ActivityPub.Transmogrifier.NoteHandlingTest do
@@ -25,21 +25,22 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
   describe "handle_incoming" do
     test "it works for incoming notices with tag not being an array (kroeg)" do
-      data = File.read!("test/fixtures/kroeg-array-less-emoji.json") |> Poison.decode!()
+      data = File.read!("test/fixtures/kroeg-array-less-emoji.json") |> Jason.decode!()
 
       {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
-      object = Object.normalize(data["object"])
+      object = Object.normalize(data["object"], fetch: false)
 
       assert object.data["emoji"] == %{
                "icon_e_smile" => "https://puckipedia.com/forum/images/smilies/icon_e_smile.png"
              }
 
-      data = File.read!("test/fixtures/kroeg-array-less-hashtag.json") |> Poison.decode!()
+      data = File.read!("test/fixtures/kroeg-array-less-hashtag.json") |> Jason.decode!()
 
       {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
-      object = Object.normalize(data["object"])
+      object = Object.normalize(data["object"], fetch: false)
 
-      assert "test" in object.data["tag"]
+      assert "test" in Object.tags(object)
+      assert Object.hashtags(object) == ["test"]
     end
 
     test "it cleans up incoming notices which are not really DMs" do
@@ -50,7 +51,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
       data =
         File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Poison.decode!()
+        |> Jason.decode!()
         |> Map.put("to", to)
         |> Map.put("cc", [])
 
@@ -66,7 +67,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       assert data["to"] == []
       assert data["cc"] == to
 
-      object_data = Object.normalize(activity).data
+      object_data = Object.normalize(activity, fetch: false).data
 
       assert object_data["to"] == []
       assert object_data["cc"] == to
@@ -77,8 +78,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
       data =
         File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Poison.decode!()
-        |> Map.put("object", Object.normalize(activity).data)
+        |> Jason.decode!()
+        |> Map.put("object", Object.normalize(activity, fetch: false).data)
 
       {:ok, returned_activity} = Transmogrifier.handle_incoming(data)
 
@@ -89,7 +90,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     test "it fetches reply-to activities if we don't have them" do
       data =
         File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Poison.decode!()
+        |> Jason.decode!()
 
       object =
         data["object"]
@@ -97,7 +98,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
       data = Map.put(data, "object", object)
       {:ok, returned_activity} = Transmogrifier.handle_incoming(data)
-      returned_object = Object.normalize(returned_activity, false)
+      returned_object = Object.normalize(returned_activity, fetch: false)
 
       assert %Activity{} =
                Activity.get_create_by_object_ap_id(
@@ -111,7 +112,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     test "it does not fetch reply-to activities beyond max replies depth limit" do
       data =
         File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Poison.decode!()
+        |> Jason.decode!()
 
       object =
         data["object"]
@@ -123,7 +124,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
         allowed_thread_distance?: fn _ -> false end do
         {:ok, returned_activity} = Transmogrifier.handle_incoming(data)
 
-        returned_object = Object.normalize(returned_activity, false)
+        returned_object = Object.normalize(returned_activity, fetch: false)
 
         refute Activity.get_create_by_object_ap_id(
                  "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
@@ -136,7 +137,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     test "it does not crash if the object in inReplyTo can't be fetched" do
       data =
         File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Poison.decode!()
+        |> Jason.decode!()
 
       object =
         data["object"]
@@ -152,15 +153,15 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     end
 
     test "it does not work for deactivated users" do
-      data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!()
+      data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!()
 
-      insert(:user, ap_id: data["actor"], deactivated: true)
+      insert(:user, ap_id: data["actor"], is_active: false)
 
       assert {:error, _} = Transmogrifier.handle_incoming(data)
     end
 
     test "it works for incoming notices" do
-      data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!()
+      data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!()
 
       {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
 
@@ -179,7 +180,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
       assert data["actor"] == "http://mastodon.example.org/users/admin"
 
-      object_data = Object.normalize(data["object"]).data
+      object_data = Object.normalize(data["object"], fetch: false).data
 
       assert object_data["id"] ==
                "http://mastodon.example.org/users/admin/statuses/99512778738411822"
@@ -205,40 +206,40 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     end
 
     test "it works for incoming notices without the sensitive property but an nsfw hashtag" do
-      data = File.read!("test/fixtures/mastodon-post-activity-nsfw.json") |> Poison.decode!()
+      data = File.read!("test/fixtures/mastodon-post-activity-nsfw.json") |> Jason.decode!()
 
       {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
 
-      object_data = Object.normalize(data["object"], false).data
+      object_data = Object.normalize(data["object"], fetch: false).data
 
       assert object_data["sensitive"] == true
     end
 
     test "it works for incoming notices with hashtags" do
-      data = File.read!("test/fixtures/mastodon-post-activity-hashtag.json") |> Poison.decode!()
+      data = File.read!("test/fixtures/mastodon-post-activity-hashtag.json") |> Jason.decode!()
 
       {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
-      object = Object.normalize(data["object"])
+      object = Object.normalize(data["object"], fetch: false)
 
-      assert Enum.at(object.data["tag"], 2) == "moo"
+      assert Enum.at(Object.tags(object), 2) == "moo"
+      assert Object.hashtags(object) == ["moo"]
     end
 
     test "it works for incoming notices with contentMap" do
-      data =
-        File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Poison.decode!()
+      data = File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Jason.decode!()
 
       {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
-      object = Object.normalize(data["object"])
+      object = Object.normalize(data["object"], fetch: false)
 
       assert object.data["content"] ==
                "<p><span class=\"h-card\"><a href=\"http://localtesting.pleroma.lol/users/lain\" class=\"u-url mention\">@<span>lain</span></a></span></p>"
     end
 
     test "it works for incoming notices with to/cc not being an array (kroeg)" do
-      data = File.read!("test/fixtures/kroeg-post-activity.json") |> Poison.decode!()
+      data = File.read!("test/fixtures/kroeg-post-activity.json") |> Jason.decode!()
 
       {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
-      object = Object.normalize(data["object"])
+      object = Object.normalize(data["object"], fetch: false)
 
       assert object.data["content"] ==
                "<p>henlo from my Psion netBook</p><p>message sent from my Psion netBook</p>"
@@ -249,7 +250,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
       data =
         File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Poison.decode!()
+        |> Jason.decode!()
         |> Map.put("actor", user.ap_id)
         |> Map.put("to", ["https://www.w3.org/ns/activitystreams#Public"])
         |> Map.put("cc", [])
@@ -273,7 +274,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
       data =
         File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Poison.decode!()
+        |> Jason.decode!()
         |> Map.put("actor", user.ap_id)
         |> Map.put("to", nil)
         |> Map.put("cc", nil)
@@ -296,7 +297,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     test "it strips internal likes" do
       data =
         File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Poison.decode!()
+        |> Jason.decode!()
 
       likes = %{
         "first" =>
@@ -404,7 +405,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       data =
         "test/fixtures/mastodon-post-activity.json"
         |> File.read!()
-        |> Poison.decode!()
+        |> Jason.decode!()
 
       items = get_in(data, ["object", "replies", "first", "items"])
       assert length(items) > 0
@@ -416,7 +417,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       data: data,
       items: items
     } do
-      Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 10)
+      clear_config([:instance, :federation_incoming_replies_max_depth], 10)
 
       {:ok, _activity} = Transmogrifier.handle_incoming(data)
 
@@ -428,7 +429,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
     test "does NOT schedule background fetching of `replies` beyond max thread depth limit allows",
          %{data: data} do
-      Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0)
+      clear_config([:instance, :federation_incoming_replies_max_depth], 0)
 
       {:ok, _activity} = Transmogrifier.handle_incoming(data)
 
@@ -465,7 +466,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       federation_output: federation_output,
       replies_uris: replies_uris
     } do
-      Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 1)
+      clear_config([:instance, :federation_incoming_replies_max_depth], 1)
 
       {:ok, _activity} = Transmogrifier.handle_incoming(federation_output)
 
@@ -477,7 +478,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
     test "does NOT schedule background fetching of `replies` beyond max thread depth limit allows",
          %{federation_output: federation_output} do
-      Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0)
+      clear_config([:instance, :federation_incoming_replies_max_depth], 0)
 
       {:ok, _activity} = Transmogrifier.handle_incoming(federation_output)
 
@@ -543,7 +544,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     setup do: clear_config([:instance, :federation_incoming_replies_max_depth])
 
     setup do
-      data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
+      data = Jason.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
       [data: data]
     end
 
@@ -552,7 +553,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     end
 
     test "returns object with inReplyTo when denied incoming reply", %{data: data} do
-      Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0)
+      clear_config([:instance, :federation_incoming_replies_max_depth], 0)
 
       object_with_reply =
         Map.put(data["object"], "inReplyTo", "https://shitposter.club/notice/2827873")
@@ -586,7 +587,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
           "https://mstdn.io/users/mayuutann/statuses/99568293732299394"
         )
 
-      Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 5)
+      clear_config([:instance, :federation_incoming_replies_max_depth], 5)
       modified_object = Transmogrifier.fix_in_reply_to(object_with_reply)
 
       assert modified_object["inReplyTo"] ==
@@ -599,7 +600,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
   describe "fix_attachments/1" do
     test "returns not modified object" do
-      data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
+      data = Jason.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
       assert Transmogrifier.fix_attachments(data) == data
     end
 
@@ -663,7 +664,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
 
   describe "fix_emoji/1" do
     test "returns not modified object when object not contains tags" do
-      data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
+      data = Jason.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
       assert Transmogrifier.fix_emoji(data) == data
     end
 
@@ -696,7 +697,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     setup do: clear_config([:activitypub, :note_replies_output_limit], 2)
 
     test "returns unmodified object if activity doesn't have self-replies" do
-      data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
+      data = Jason.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
       assert Transmogrifier.set_replies(data) == data
     end
 
@@ -726,7 +727,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
           in_reply_to_status_id: id1
         })
 
-      object = Object.normalize(activity)
+      object = Object.normalize(activity, fetch: false)
       replies_uris = Enum.map([self_reply1, self_reply2], fn a -> a.object.data["id"] end)
 
       assert %{"type" => "Collection", "items" => ^replies_uris} =