Merge branch 'develop' into 'remove-avatar-header'
[akkoma] / test / web / mastodon_api / account_view_test.exs
index 6be66ef6367db297ecd7797f45aa48d2f466f6ca..de6aeec720a9fc229830ed02a48e8bd4b708fdee 100644 (file)
@@ -5,8 +5,8 @@
 defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
   use Pleroma.DataCase
   import Pleroma.Factory
-  alias Pleroma.Web.MastodonAPI.AccountView
   alias Pleroma.User
+  alias Pleroma.Web.MastodonAPI.AccountView
 
   test "Represent a user account" do
     source_data = %{
@@ -19,9 +19,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
       ]
     }
 
+    background_image = %{
+      "url" => [%{"href" => "https://example.com/images/asuka_hospital.png"}]
+    }
+
     user =
       insert(:user, %{
-        info: %{note_count: 5, follower_count: 3, source_data: source_data},
+        info: %{
+          note_count: 5,
+          follower_count: 3,
+          source_data: source_data,
+          background: background_image
+        },
         nickname: "shp@shitposter.club",
         name: ":karjalanpiirakka: shp",
         bio: "<script src=\"invalid-html\"></script><span>valid html</span>",
@@ -55,22 +64,45 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
       fields: [],
       bot: false,
       source: %{
-        note: "",
-        privacy: "public",
-        sensitive: false
+        note: "valid html",
+        sensitive: false,
+        pleroma: %{}
       },
       pleroma: %{
+        background_image: "https://example.com/images/asuka_hospital.png",
         confirmation_pending: false,
         tags: [],
         is_admin: false,
         is_moderator: false,
-        relationship: %{}
+        hide_favorites: true,
+        hide_followers: false,
+        hide_follows: false,
+        relationship: %{},
+        skip_thread_containment: false
       }
     }
 
     assert expected == AccountView.render("account.json", %{user: user})
   end
 
+  test "Represent the user account for the account owner" do
+    user = insert(:user)
+
+    notification_settings = %{
+      "followers" => true,
+      "follows" => true,
+      "non_follows" => true,
+      "non_followers" => true
+    }
+
+    privacy = user.info.default_scope
+
+    assert %{
+             pleroma: %{notification_settings: ^notification_settings},
+             source: %{privacy: ^privacy}
+           } = AccountView.render("account.json", %{user: user, for: user})
+  end
+
   test "Represent a Service(bot) account" do
     user =
       insert(:user, %{
@@ -99,16 +131,21 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
       fields: [],
       bot: true,
       source: %{
-        note: "",
-        privacy: "public",
-        sensitive: false
+        note: user.bio,
+        sensitive: false,
+        pleroma: %{}
       },
       pleroma: %{
+        background_image: nil,
         confirmation_pending: false,
         tags: [],
         is_admin: false,
         is_moderator: false,
-        relationship: %{}
+        hide_favorites: true,
+        hide_followers: false,
+        hide_follows: false,
+        relationship: %{},
+        skip_thread_containment: false
       }
     }
 
@@ -142,9 +179,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
       blocking: true,
       muting: false,
       muting_notifications: false,
+      subscribing: false,
       requested: false,
       domain_blocking: false,
-      showing_reblogs: false,
+      showing_reblogs: true,
       endorsed: false
     }
 
@@ -154,15 +192,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
   test "represent an embedded relationship" do
     user =
       insert(:user, %{
-        info: %{note_count: 5, follower_count: 3, source_data: %{"type" => "Service"}},
+        info: %{note_count: 5, follower_count: 0, source_data: %{"type" => "Service"}},
         nickname: "shp@shitposter.club",
         inserted_at: ~N[2017-08-15 15:47:06.597036]
       })
 
     other_user = insert(:user)
-
     {:ok, other_user} = User.follow(other_user, user)
     {:ok, other_user} = User.block(other_user, user)
+    {:ok, _} = User.follow(insert(:user), user)
 
     expected = %{
       id: to_string(user.id),
@@ -171,7 +209,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
       display_name: user.name,
       locked: false,
       created_at: "2017-08-15T15:47:06.000Z",
-      followers_count: 3,
+      followers_count: 1,
       following_count: 0,
       statuses_count: 5,
       note: user.bio,
@@ -184,30 +222,57 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
       fields: [],
       bot: true,
       source: %{
-        note: "",
-        privacy: "public",
-        sensitive: false
+        note: user.bio,
+        sensitive: false,
+        pleroma: %{}
       },
       pleroma: %{
+        background_image: nil,
         confirmation_pending: false,
         tags: [],
         is_admin: false,
         is_moderator: false,
+        hide_favorites: true,
+        hide_followers: false,
+        hide_follows: false,
         relationship: %{
           id: to_string(user.id),
           following: false,
           followed_by: false,
           blocking: true,
+          subscribing: false,
           muting: false,
           muting_notifications: false,
           requested: false,
           domain_blocking: false,
-          showing_reblogs: false,
+          showing_reblogs: true,
           endorsed: false
-        }
+        },
+        skip_thread_containment: false
       }
     }
 
     assert expected == AccountView.render("account.json", %{user: user, for: other_user})
   end
+
+  test "returns the settings store if the requesting user is the represented user and it's requested specifically" do
+    user = insert(:user, %{info: %User.Info{pleroma_settings_store: %{fe: "test"}}})
+
+    result =
+      AccountView.render("account.json", %{user: user, for: user, with_pleroma_settings: true})
+
+    assert result.pleroma.settings_store == %{:fe => "test"}
+
+    result = AccountView.render("account.json", %{user: user, with_pleroma_settings: true})
+    assert result.pleroma[:settings_store] == nil
+
+    result = AccountView.render("account.json", %{user: user, for: user})
+    assert result.pleroma[:settings_store] == nil
+  end
+
+  test "sanitizes display names" do
+    user = insert(:user, name: "<marquee> username </marquee>")
+    result = AccountView.render("account.json", %{user: user})
+    refute result.display_name == "<marquee> username </marquee>"
+  end
 end