Merge branch 'develop' into feature/polls-2-electric-boogalo
[akkoma] / test / web / mastodon_api / account_view_test.exs
index 259258281c8bb731ab9a5c27c9845e9278840698..23f25099040eb460bbb11d26038fd2df505cc094 100644 (file)
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
 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
-    user = insert(:user, %{info: %{"note_count" => 5, "follower_count" => 3}, nickname: "shp@shitposter.club"})
+    source_data = %{
+      "tag" => [
+        %{
+          "type" => "Emoji",
+          "icon" => %{"url" => "/file.png"},
+          "name" => ":karjalanpiirakka:"
+        }
+      ]
+    }
+
+    user =
+      insert(:user, %{
+        info: %{note_count: 5, follower_count: 3, source_data: source_data},
+        nickname: "shp@shitposter.club",
+        name: ":karjalanpiirakka: shp",
+        bio: "<script src=\"invalid-html\"></script><span>valid html</span>",
+        inserted_at: ~N[2017-08-15 15:47:06.597036]
+      })
 
     expected = %{
-      id: user.id,
+      id: to_string(user.id),
       username: "shp",
       acct: user.nickname,
       display_name: user.name,
       locked: false,
-      created_at: user.inserted_at,
+      created_at: "2017-08-15T15:47:06.000Z",
+      followers_count: 3,
+      following_count: 0,
+      statuses_count: 5,
+      note: "<span>valid html</span>",
+      url: user.ap_id,
+      avatar: "http://localhost:4001/images/avi.png",
+      avatar_static: "http://localhost:4001/images/avi.png",
+      header: "http://localhost:4001/images/banner.png",
+      header_static: "http://localhost:4001/images/banner.png",
+      emojis: [
+        %{
+          "static_url" => "/file.png",
+          "url" => "/file.png",
+          "shortcode" => "karjalanpiirakka",
+          "visible_in_picker" => false
+        }
+      ],
+      fields: [],
+      bot: false,
+      source: %{
+        note: "valid html",
+        sensitive: false,
+        pleroma: %{}
+      },
+      pleroma: %{
+        confirmation_pending: false,
+        tags: [],
+        is_admin: false,
+        is_moderator: false,
+        hide_favorites: true,
+        hide_followers: false,
+        hide_follows: false,
+        relationship: %{}
+      }
+    }
+
+    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, %{
+        info: %{note_count: 5, follower_count: 3, source_data: %{"type" => "Service"}},
+        nickname: "shp@shitposter.club",
+        inserted_at: ~N[2017-08-15 15:47:06.597036]
+      })
+
+    expected = %{
+      id: to_string(user.id),
+      username: "shp",
+      acct: user.nickname,
+      display_name: user.name,
+      locked: false,
+      created_at: "2017-08-15T15:47:06.000Z",
       followers_count: 3,
       following_count: 0,
       statuses_count: 5,
       note: user.bio,
       url: user.ap_id,
-      avatar: "https://placehold.it/48x48",
-      avatar_static: "https://placehold.it/48x48",
-      header: "https://placehold.it/700x335",
-      header_static: "https://placehold.it/700x335"
+      avatar: "http://localhost:4001/images/avi.png",
+      avatar_static: "http://localhost:4001/images/avi.png",
+      header: "http://localhost:4001/images/banner.png",
+      header_static: "http://localhost:4001/images/banner.png",
+      emojis: [],
+      fields: [],
+      bot: true,
+      source: %{
+        note: user.bio,
+        sensitive: false,
+        pleroma: %{}
+      },
+      pleroma: %{
+        confirmation_pending: false,
+        tags: [],
+        is_admin: false,
+        is_moderator: false,
+        hide_favorites: true,
+        hide_followers: false,
+        hide_follows: false,
+        relationship: %{}
+      }
     }
 
     assert expected == AccountView.render("account.json", %{user: user})
@@ -32,7 +143,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
     user = insert(:user)
 
     expected = %{
-      id: user.id,
+      id: to_string(user.id),
       acct: user.nickname,
       username: user.nickname,
       url: user.ap_id
@@ -46,17 +157,86 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
     other_user = insert(:user)
 
     {:ok, user} = User.follow(user, other_user)
+    {:ok, user} = User.block(user, other_user)
 
     expected = %{
-      id: other_user.id,
+      id: to_string(other_user.id),
       following: false,
-      followed_by: true,
-      blocking: false,
+      followed_by: false,
+      blocking: true,
       muting: false,
+      muting_notifications: false,
+      subscribing: false,
       requested: false,
-      domain_blocking: false
+      domain_blocking: false,
+      showing_reblogs: true,
+      endorsed: false
     }
 
     assert expected == AccountView.render("relationship.json", %{user: user, target: other_user})
   end
+
+  test "represent an embedded relationship" do
+    user =
+      insert(:user, %{
+        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),
+      username: "shp",
+      acct: user.nickname,
+      display_name: user.name,
+      locked: false,
+      created_at: "2017-08-15T15:47:06.000Z",
+      followers_count: 1,
+      following_count: 0,
+      statuses_count: 5,
+      note: user.bio,
+      url: user.ap_id,
+      avatar: "http://localhost:4001/images/avi.png",
+      avatar_static: "http://localhost:4001/images/avi.png",
+      header: "http://localhost:4001/images/banner.png",
+      header_static: "http://localhost:4001/images/banner.png",
+      emojis: [],
+      fields: [],
+      bot: true,
+      source: %{
+        note: user.bio,
+        sensitive: false,
+        pleroma: %{}
+      },
+      pleroma: %{
+        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: true,
+          endorsed: false
+        }
+      }
+    }
+
+    assert expected == AccountView.render("account.json", %{user: user, for: other_user})
+  end
 end