spc-pleroma/test/web/mastodon_api/account_view_test.exs

258 lines
7.2 KiB
Elixir
Raw Normal View History

2018-12-23 20:11:29 +00:00
# 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
2017-09-13 13:55:10 +00:00
alias Pleroma.User
alias Pleroma.Web.MastodonAPI.AccountView
test "Represent a user account" do
source_data = %{
"tag" => [
%{
"type" => "Emoji",
"icon" => %{"url" => "/file.png"},
"name" => ":karjalanpiirakka:"
}
]
}
2018-03-30 13:01:53 +00:00
user =
insert(:user, %{
2018-11-20 18:54:48 +00:00
info: %{note_count: 5, follower_count: 3, source_data: source_data},
2018-03-30 13:01:53 +00:00
nickname: "shp@shitposter.club",
name: ":karjalanpiirakka: shp",
bio: "<script src=\"invalid-html\"></script><span>valid html</span>",
2018-03-30 13:01:53 +00:00
inserted_at: ~N[2017-08-15 15:47:06.597036]
})
expected = %{
2017-11-10 16:18:19 +00:00
id: to_string(user.id),
username: "shp",
acct: user.nickname,
display_name: user.name,
locked: false,
2017-09-15 15:50:47 +00:00
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
}
],
2018-06-04 15:44:08 +00:00
fields: [],
bot: false,
source: %{
note: "valid html",
2019-04-25 06:14:35 +00:00
sensitive: false,
pleroma: %{}
2018-12-06 17:38:52 +00:00
},
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, %{
2018-11-20 18:54:48 +00:00
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: "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,
2019-04-25 06:14:35 +00:00
sensitive: false,
pleroma: %{}
2018-12-06 17:38:52 +00:00
},
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 a smaller mention" do
user = insert(:user)
expected = %{
2017-11-10 16:18:19 +00:00
id: to_string(user.id),
acct: user.nickname,
username: user.nickname,
url: user.ap_id
}
assert expected == AccountView.render("mention.json", %{user: user})
end
2017-09-13 13:55:10 +00:00
test "represent a relationship" do
user = insert(:user)
other_user = insert(:user)
{:ok, user} = User.follow(user, other_user)
2017-11-03 07:23:31 +00:00
{:ok, user} = User.block(user, other_user)
2017-09-13 13:55:10 +00:00
expected = %{
2017-11-10 16:18:19 +00:00
id: to_string(other_user.id),
following: false,
2017-09-13 14:05:39 +00:00
followed_by: false,
2017-11-03 07:23:31 +00:00
blocking: true,
2017-09-13 13:55:10 +00:00
muting: false,
muting_notifications: false,
subscribing: false,
2017-09-13 13:55:10 +00:00
requested: false,
domain_blocking: false,
showing_reblogs: true,
endorsed: false
2017-09-13 13:55:10 +00:00
}
assert expected == AccountView.render("relationship.json", %{user: user, target: other_user})
end
test "represent an embedded relationship" do
user =
insert(:user, %{
2019-04-22 07:20:43 +00:00
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)
2019-04-22 07:20:43 +00:00
{: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",
2019-04-22 07:20:43 +00:00
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,
2019-04-25 06:14:35 +00:00
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
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
end