Merge branch 'features/mrf-reasons' into 'develop'
[akkoma] / test / web / activity_pub / publisher_test.exs
index da26b13f7040b8f880e1296231970e4cc4986512..b9388b966d5d3e067df18c325a54b8c146728a35 100644 (file)
@@ -23,9 +23,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
     :ok
   end
 
-  clear_config_all([:instance, :federating]) do
-    Pleroma.Config.put([:instance, :federating], true)
-  end
+  setup_all do: clear_config([:instance, :federating], true)
 
   describe "gather_webfinger_links/1" do
     test "it returns links" do
@@ -50,10 +48,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
 
   describe "determine_inbox/2" do
     test "it returns sharedInbox for messages involving as:Public in to" do
-      user =
-        insert(:user, %{
-          source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}
-        })
+      user = insert(:user, %{shared_inbox: "http://example.com/inbox"})
 
       activity = %Activity{
         data: %{"to" => [@as_public], "cc" => [user.follower_address]}
@@ -63,10 +58,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
     end
 
     test "it returns sharedInbox for messages involving as:Public in cc" do
-      user =
-        insert(:user, %{
-          source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}
-        })
+      user = insert(:user, %{shared_inbox: "http://example.com/inbox"})
 
       activity = %Activity{
         data: %{"cc" => [@as_public], "to" => [user.follower_address]}
@@ -76,11 +68,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
     end
 
     test "it returns sharedInbox for messages involving multiple recipients in to" do
-      user =
-        insert(:user, %{
-          source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}
-        })
-
+      user = insert(:user, %{shared_inbox: "http://example.com/inbox"})
       user_two = insert(:user)
       user_three = insert(:user)
 
@@ -92,11 +80,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
     end
 
     test "it returns sharedInbox for messages involving multiple recipients in cc" do
-      user =
-        insert(:user, %{
-          source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}
-        })
-
+      user = insert(:user, %{shared_inbox: "http://example.com/inbox"})
       user_two = insert(:user)
       user_three = insert(:user)
 
@@ -109,12 +93,10 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
 
     test "it returns sharedInbox for messages involving multiple recipients in total" do
       user =
-        insert(:user,
-          source_data: %{
-            "inbox" => "http://example.com/personal-inbox",
-            "endpoints" => %{"sharedInbox" => "http://example.com/inbox"}
-          }
-        )
+        insert(:user, %{
+          shared_inbox: "http://example.com/inbox",
+          inbox: "http://example.com/personal-inbox"
+        })
 
       user_two = insert(:user)
 
@@ -127,12 +109,10 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
 
     test "it returns inbox for messages involving single recipients in total" do
       user =
-        insert(:user,
-          source_data: %{
-            "inbox" => "http://example.com/personal-inbox",
-            "endpoints" => %{"sharedInbox" => "http://example.com/inbox"}
-          }
-        )
+        insert(:user, %{
+          shared_inbox: "http://example.com/inbox",
+          inbox: "http://example.com/personal-inbox"
+        })
 
       activity = %Activity{
         data: %{"to" => [user.ap_id], "cc" => []}
@@ -143,6 +123,39 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
   end
 
   describe "publish_one/1" do
+    test "publish to url with with different ports" do
+      inbox80 = "http://42.site/users/nick1/inbox"
+      inbox42 = "http://42.site:42/users/nick1/inbox"
+
+      mock(fn
+        %{method: :post, url: "http://42.site:42/users/nick1/inbox"} ->
+          {:ok, %Tesla.Env{status: 200, body: "port 42"}}
+
+        %{method: :post, url: "http://42.site/users/nick1/inbox"} ->
+          {:ok, %Tesla.Env{status: 200, body: "port 80"}}
+      end)
+
+      actor = insert(:user)
+
+      assert {:ok, %{body: "port 42"}} =
+               Publisher.publish_one(%{
+                 inbox: inbox42,
+                 json: "{}",
+                 actor: actor,
+                 id: 1,
+                 unreachable_since: true
+               })
+
+      assert {:ok, %{body: "port 80"}} =
+               Publisher.publish_one(%{
+                 inbox: inbox80,
+                 json: "{}",
+                 actor: actor,
+                 id: 1,
+                 unreachable_since: true
+               })
+    end
+
     test_with_mock "calls `Instances.set_reachable` on successful federation if `unreachable_since` is not specified",
                    Instances,
                    [:passthrough],
@@ -151,7 +164,6 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
       inbox = "http://200.site/users/nick1/inbox"
 
       assert {:ok, _} = Publisher.publish_one(%{inbox: inbox, json: "{}", actor: actor, id: 1})
-
       assert called(Instances.set_reachable(inbox))
     end
 
@@ -260,11 +272,11 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
                    [:passthrough],
                    [] do
       follower =
-        insert(:user,
+        insert(:user, %{
           local: false,
-          source_data: %{"inbox" => "https://domain.com/users/nick1/inbox"},
+          inbox: "https://domain.com/users/nick1/inbox",
           ap_enabled: true
-        )
+        })
 
       actor = insert(:user, follower_address: follower.ap_id)
       user = insert(:user)
@@ -297,14 +309,14 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
       fetcher =
         insert(:user,
           local: false,
-          source_data: %{"inbox" => "https://domain.com/users/nick1/inbox"},
+          inbox: "https://domain.com/users/nick1/inbox",
           ap_enabled: true
         )
 
       another_fetcher =
         insert(:user,
           local: false,
-          source_data: %{"inbox" => "https://domain2.com/users/nick1/inbox"},
+          inbox: "https://domain2.com/users/nick1/inbox",
           ap_enabled: true
         )