Merge pull request '2022.09 stable' (#208) from develop into stable
[akkoma] / test / pleroma / web / activity_pub / transmogrifier / note_handling_test.exs
index 3eeae40042c76f7dacef8ef9ffbc252d85d9c7b0..002042802ef73d4424810dfa8be572e4888b4118 100644 (file)
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
   alias Pleroma.Object
   alias Pleroma.User
   alias Pleroma.Web.ActivityPub.Transmogrifier
+  alias Pleroma.Web.ActivityPub.Utils
   alias Pleroma.Web.CommonAPI
 
   import Mock
@@ -42,36 +43,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       assert Object.hashtags(object) == ["test"]
     end
 
-    test "it cleans up incoming notices which are not really DMs" do
-      user = insert(:user)
-      other_user = insert(:user)
-
-      to = [user.ap_id, other_user.ap_id]
-
-      data =
-        File.read!("test/fixtures/mastodon-post-activity.json")
-        |> Jason.decode!()
-        |> Map.put("to", to)
-        |> Map.put("cc", [])
-
-      object =
-        data["object"]
-        |> Map.put("to", to)
-        |> Map.put("cc", [])
-
-      data = Map.put(data, "object", object)
-
-      {:ok, %Activity{data: data, local: false} = activity} = Transmogrifier.handle_incoming(data)
-
-      assert data["to"] == []
-      assert data["cc"] == to
-
-      object_data = Object.normalize(activity, fetch: false).data
-
-      assert object_data["to"] == []
-      assert object_data["cc"] == to
-    end
-
     test "it ignores an incoming notice if we already have it" do
       activity = insert(:note_activity)
 
@@ -171,8 +142,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       assert data["to"] == ["https://www.w3.org/ns/activitystreams#Public"]
 
       assert data["cc"] == [
-               "http://mastodon.example.org/users/admin/followers",
-               "http://localtesting.pleroma.lol/users/lain"
+               "http://localtesting.pleroma.lol/users/lain",
+               "http://mastodon.example.org/users/admin/followers"
              ]
 
       assert data["actor"] == "http://mastodon.example.org/users/admin"
@@ -185,8 +156,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       assert object_data["to"] == ["https://www.w3.org/ns/activitystreams#Public"]
 
       assert object_data["cc"] == [
-               "http://mastodon.example.org/users/admin/followers",
-               "http://localtesting.pleroma.lol/users/lain"
+               "http://localtesting.pleroma.lol/users/lain",
+               "http://mastodon.example.org/users/admin/followers"
              ]
 
       assert object_data["actor"] == "http://mastodon.example.org/users/admin"
@@ -321,9 +292,11 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       object = Map.put(data["object"], "likes", likes)
       data = Map.put(data, "object", object)
 
-      {:ok, %Activity{object: object}} = Transmogrifier.handle_incoming(data)
+      {:ok, %Activity{} = activity} = Transmogrifier.handle_incoming(data)
 
-      refute Map.has_key?(object.data, "likes")
+      object = Object.normalize(activity)
+
+      assert object.data["likes"] == []
     end
 
     test "it strips internal reactions" do
@@ -350,8 +323,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       assert {:ok, activity} = Transmogrifier.handle_incoming(data)
 
       assert [
-               "http://mastodon.example.org/users/admin/followers",
-               "http://localtesting.pleroma.lol/users/lain"
+               "http://localtesting.pleroma.lol/users/lain",
+               "http://mastodon.example.org/users/admin/followers"
              ] == activity.data["cc"]
 
       assert ["https://www.w3.org/ns/activitystreams#Public"] == activity.data["to"]
@@ -407,7 +380,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
       clear_config([:instance, :federation_incoming_replies_max_depth], 10)
 
       {:ok, activity} = Transmogrifier.handle_incoming(data)
-
       object = Object.normalize(activity.data["object"])
 
       assert object.data["replies"] == items
@@ -435,10 +407,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
     setup do
       replies = %{
         "type" => "Collection",
-        "items" => [
-          Pleroma.Web.ActivityPub.Utils.generate_object_id(),
-          Pleroma.Web.ActivityPub.Utils.generate_object_id()
-        ]
+        "items" => [Utils.generate_object_id(), Utils.generate_object_id()]
       }
 
       activity =
@@ -737,4 +706,81 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do
              }
            ]
   end
+
+  describe "fix_quote_url/1" do
+    test "a misskey quote should work", _ do
+      Tesla.Mock.mock(fn %{
+                           method: :get,
+                           url: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924"
+                         } ->
+        %Tesla.Env{
+          status: 200,
+          body: File.read!("test/fixtures/quoted_status.json"),
+          headers: HttpRequestMock.activitypub_object_headers()
+        }
+      end)
+
+      insert(:user, %{ap_id: "https://misskey.io/users/93492q0ip0"})
+      insert(:user, %{ap_id: "https://example.com/users/user"})
+
+      note =
+        "test/fixtures/misskey/quote.json"
+        |> File.read!()
+        |> Jason.decode!()
+
+      %{"quoteUri" => "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924"} =
+        Transmogrifier.fix_quote_url(note)
+    end
+
+    test "a fedibird quote should work", _ do
+      Tesla.Mock.mock(fn %{
+                           method: :get,
+                           url: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924"
+                         } ->
+        %Tesla.Env{
+          status: 200,
+          body: File.read!("test/fixtures/quoted_status.json"),
+          headers: HttpRequestMock.activitypub_object_headers()
+        }
+      end)
+
+      insert(:user, %{ap_id: "https://fedibird.com/users/akkoma_ap_integration_tester"})
+      insert(:user, %{ap_id: "https://example.com/users/user"})
+
+      note =
+        "test/fixtures/fedibird/quote.json"
+        |> File.read!()
+        |> Jason.decode!()
+
+      %{
+        "quoteUri" => "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924"
+      } = Transmogrifier.fix_quote_url(note)
+    end
+
+    test "quote fetching should stop after n levels", _ do
+      clear_config([:instance, :federation_incoming_replies_max_depth], 1)
+
+      Tesla.Mock.mock(fn %{
+                           method: :get,
+                           url: "https://misskey.io/notes/934gok3482"
+                         } ->
+        %Tesla.Env{
+          status: 200,
+          body: File.read!("test/fixtures/misskey/recursive_quote.json"),
+          headers: HttpRequestMock.activitypub_object_headers()
+        }
+      end)
+
+      insert(:user, %{ap_id: "https://misskey.io/users/93492q0ip0"})
+
+      note =
+        "test/fixtures/misskey/recursive_quote.json"
+        |> File.read!()
+        |> Jason.decode!()
+
+      %{
+        "quoteUri" => "https://misskey.io/notes/934gok3482"
+      } = Transmogrifier.fix_quote_url(note)
+    end
+  end
 end