Purge Rejected Follow requests in daily task (#334)
[akkoma] / test / pleroma / web / twitter_api / remote_follow_controller_test.exs
index dfe5b02bed67811a17cebf426c129b9389fd4fdd..e7c496eb04adccf3f25c217231376bf6aa1c09b5 100644 (file)
@@ -1,9 +1,9 @@
 # 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.TwitterAPI.RemoteFollowControllerTest do
-  use Pleroma.Web.ConnCase
+  use Pleroma.Web.ConnCase, async: false
 
   alias Pleroma.MFA
   alias Pleroma.MFA.TOTP
@@ -27,6 +27,16 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
             body: File.read!("test/fixtures/tesla_mock/status.emelie.json")
           }
 
+        %{method: :get, url: "https://mastodon.social/users/emelie/collections/featured"} ->
+          %Tesla.Env{
+            status: 200,
+            headers: [{"content-type", "application/activity+json"}],
+            body:
+              File.read!("test/fixtures/users_mock/masto_featured.json")
+              |> String.replace("{{domain}}", "mastodon.social")
+              |> String.replace("{{nickname}}", "emelie")
+          }
+
         %{method: :get, url: "https://mastodon.social/users/emelie"} ->
           %Tesla.Env{
             status: 200,
@@ -52,6 +62,16 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
             headers: [{"content-type", "application/activity+json"}],
             body: File.read!("test/fixtures/tesla_mock/emelie.json")
           }
+
+        %{method: :get, url: "https://mastodon.social/users/emelie/collections/featured"} ->
+          %Tesla.Env{
+            status: 200,
+            headers: [{"content-type", "application/activity+json"}],
+            body:
+              File.read!("test/fixtures/users_mock/masto_featured.json")
+              |> String.replace("{{domain}}", "mastodon.social")
+              |> String.replace("{{nickname}}", "emelie")
+          }
       end)
 
       response =
@@ -70,6 +90,16 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
             headers: [{"content-type", "application/activity+json"}],
             body: File.read!("test/fixtures/tesla_mock/emelie.json")
           }
+
+        %{method: :get, url: "https://mastodon.social/users/emelie/collections/featured"} ->
+          %Tesla.Env{
+            status: 200,
+            headers: [{"content-type", "application/activity+json"}],
+            body:
+              File.read!("test/fixtures/users_mock/masto_featured.json")
+              |> String.replace("{{domain}}", "mastodon.social")
+              |> String.replace("{{nickname}}", "emelie")
+          }
       end)
 
       user = insert(:user)
@@ -141,7 +171,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
     end
 
     test "returns error when user is deactivated", %{conn: conn} do
-      user = insert(:user, deactivated: true)
+      user = insert(:user, is_active: false)
       user2 = insert(:user)
 
       response =
@@ -154,7 +184,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
     end
 
     test "returns error when user is blocked", %{conn: conn} do
-      Pleroma.Config.put([:user, :deny_follow_blocked], true)
+      clear_config([:user, :deny_follow_blocked], true)
       user = insert(:user)
       user2 = insert(:user)
 
@@ -365,7 +395,7 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
     end
 
     test "returns error when user is blocked", %{conn: conn} do
-      Pleroma.Config.put([:user, :deny_follow_blocked], true)
+      clear_config([:user, :deny_follow_blocked], true)
       user = insert(:user)
       user2 = insert(:user)
       {:ok, _user_block} = Pleroma.User.block(user2, user)
@@ -380,4 +410,49 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
       assert response =~ "Error following account"
     end
   end
+
+  describe "avatar url" do
+    test "without media proxy" do
+      clear_config([:media_proxy, :enabled], false)
+
+      user =
+        insert(:user, %{
+          local: false,
+          avatar: %{"url" => [%{"href" => "https://remote.org/avatar.png"}]}
+        })
+
+      avatar_url = Pleroma.Web.TwitterAPI.RemoteFollowView.avatar_url(user)
+
+      assert avatar_url == "https://remote.org/avatar.png"
+    end
+
+    test "with media proxy" do
+      clear_config([:media_proxy, :enabled], true)
+
+      user =
+        insert(:user, %{
+          local: false,
+          avatar: %{"url" => [%{"href" => "https://remote.org/avatar.png"}]}
+        })
+
+      avatar_url = Pleroma.Web.TwitterAPI.RemoteFollowView.avatar_url(user)
+      url = Pleroma.Web.Endpoint.url()
+
+      assert String.starts_with?(avatar_url, url)
+    end
+
+    test "local avatar is not proxied" do
+      clear_config([:media_proxy, :enabled], true)
+
+      user =
+        insert(:user, %{
+          local: true,
+          avatar: %{"url" => [%{"href" => "#{Pleroma.Web.Endpoint.url()}/localuser/avatar.png"}]}
+        })
+
+      avatar_url = Pleroma.Web.TwitterAPI.RemoteFollowView.avatar_url(user)
+
+      assert avatar_url == "#{Pleroma.Web.Endpoint.url()}/localuser/avatar.png"
+    end
+  end
 end