2018-12-23 21:11:29 +01:00
|
|
|
# Pleroma: A lightweight social networking server
|
|
|
|
# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
|
|
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2017-09-09 12:09:53 +02:00
|
|
|
defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
|
|
|
|
use Pleroma.DataCase
|
|
|
|
import Pleroma.Factory
|
2017-09-13 15:55:10 +02:00
|
|
|
alias Pleroma.User
|
2019-03-05 03:52:23 +01:00
|
|
|
alias Pleroma.Web.MastodonAPI.AccountView
|
2017-09-09 12:09:53 +02:00
|
|
|
|
|
|
|
test "Represent a user account" do
|
2018-08-08 08:24:50 +02:00
|
|
|
source_data = %{
|
|
|
|
"tag" => [
|
|
|
|
%{
|
|
|
|
"type" => "Emoji",
|
|
|
|
"icon" => %{"url" => "/file.png"},
|
|
|
|
"name" => ":karjalanpiirakka:"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2019-06-13 19:08:05 +02:00
|
|
|
background_image = %{
|
|
|
|
"url" => [%{"href" => "https://example.com/images/asuka_hospital.png"}]
|
|
|
|
}
|
|
|
|
|
2018-03-30 15:01:53 +02:00
|
|
|
user =
|
|
|
|
insert(:user, %{
|
2019-06-13 19:08:05 +02:00
|
|
|
info: %{
|
|
|
|
note_count: 5,
|
|
|
|
follower_count: 3,
|
|
|
|
source_data: source_data,
|
|
|
|
background: background_image
|
|
|
|
},
|
2018-03-30 15:01:53 +02:00
|
|
|
nickname: "shp@shitposter.club",
|
2018-08-08 08:24:50 +02:00
|
|
|
name: ":karjalanpiirakka: shp",
|
2018-08-21 16:41:32 +02:00
|
|
|
bio: "<script src=\"invalid-html\"></script><span>valid html</span>",
|
2018-03-30 15:01:53 +02:00
|
|
|
inserted_at: ~N[2017-08-15 15:47:06.597036]
|
|
|
|
})
|
2017-09-09 12:09:53 +02:00
|
|
|
|
|
|
|
expected = %{
|
2017-11-10 17:18:19 +01:00
|
|
|
id: to_string(user.id),
|
2017-09-12 09:34:39 +02:00
|
|
|
username: "shp",
|
2017-09-09 12:09:53 +02:00
|
|
|
acct: user.nickname,
|
|
|
|
display_name: user.name,
|
|
|
|
locked: false,
|
2017-09-15 17:50:47 +02:00
|
|
|
created_at: "2017-08-15T15:47:06.000Z",
|
2017-09-09 12:09:53 +02:00
|
|
|
followers_count: 3,
|
|
|
|
following_count: 0,
|
|
|
|
statuses_count: 5,
|
2018-08-21 16:41:32 +02:00
|
|
|
note: "<span>valid html</span>",
|
2017-09-09 12:09:53 +02:00
|
|
|
url: user.ap_id,
|
2018-02-03 12:43:14 +01:00
|
|
|
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",
|
2018-08-08 08:24:50 +02:00
|
|
|
emojis: [
|
|
|
|
%{
|
|
|
|
"static_url" => "/file.png",
|
|
|
|
"url" => "/file.png",
|
|
|
|
"shortcode" => "karjalanpiirakka",
|
|
|
|
"visible_in_picker" => false
|
|
|
|
}
|
|
|
|
],
|
2018-06-04 17:44:08 +02:00
|
|
|
fields: [],
|
2018-08-10 01:44:38 +02:00
|
|
|
bot: false,
|
|
|
|
source: %{
|
2019-05-22 07:22:19 +02:00
|
|
|
note: "valid html",
|
2019-04-25 08:14:35 +02:00
|
|
|
sensitive: false,
|
|
|
|
pleroma: %{}
|
2018-12-06 18:38:52 +01:00
|
|
|
},
|
2018-12-18 12:07:05 +01:00
|
|
|
pleroma: %{
|
2019-06-13 19:08:05 +02:00
|
|
|
background_image: "https://example.com/images/asuka_hospital.png",
|
2018-12-18 12:07:05 +01:00
|
|
|
confirmation_pending: false,
|
2019-01-27 10:21:13 +01:00
|
|
|
tags: [],
|
|
|
|
is_admin: false,
|
2019-02-27 14:01:10 +01:00
|
|
|
is_moderator: false,
|
2019-04-24 19:01:42 +02:00
|
|
|
hide_favorites: true,
|
|
|
|
hide_followers: false,
|
|
|
|
hide_follows: false,
|
2019-06-03 21:51:14 +02:00
|
|
|
relationship: %{},
|
|
|
|
skip_thread_containment: false
|
2018-12-18 12:07:05 +01:00
|
|
|
}
|
2018-08-10 01:44:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
assert expected == AccountView.render("account.json", %{user: user})
|
|
|
|
end
|
|
|
|
|
2019-03-28 12:52:09 +01:00
|
|
|
test "Represent the user account for the account owner" do
|
|
|
|
user = insert(:user)
|
|
|
|
|
|
|
|
notification_settings = %{
|
|
|
|
"followers" => true,
|
2019-05-25 07:22:13 +02:00
|
|
|
"follows" => true,
|
|
|
|
"non_follows" => true,
|
|
|
|
"non_followers" => true
|
2019-03-28 12:52:09 +01:00
|
|
|
}
|
|
|
|
|
2019-04-24 19:01:42 +02:00
|
|
|
privacy = user.info.default_scope
|
|
|
|
|
|
|
|
assert %{
|
|
|
|
pleroma: %{notification_settings: ^notification_settings},
|
|
|
|
source: %{privacy: ^privacy}
|
|
|
|
} = AccountView.render("account.json", %{user: user, for: user})
|
2019-03-28 12:52:09 +01:00
|
|
|
end
|
|
|
|
|
2018-08-10 01:44:38 +02:00
|
|
|
test "Represent a Service(bot) account" do
|
|
|
|
user =
|
|
|
|
insert(:user, %{
|
2018-11-20 19:54:48 +01:00
|
|
|
info: %{note_count: 5, follower_count: 3, source_data: %{"type" => "Service"}},
|
2018-08-10 01:44:38 +02:00
|
|
|
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,
|
2017-09-16 11:52:33 +02:00
|
|
|
source: %{
|
2019-05-22 07:22:19 +02:00
|
|
|
note: user.bio,
|
2019-04-25 08:14:35 +02:00
|
|
|
sensitive: false,
|
|
|
|
pleroma: %{}
|
2018-12-06 18:38:52 +01:00
|
|
|
},
|
2018-12-18 12:07:05 +01:00
|
|
|
pleroma: %{
|
2019-06-13 19:08:05 +02:00
|
|
|
background_image: nil,
|
2018-12-18 12:07:05 +01:00
|
|
|
confirmation_pending: false,
|
2019-01-27 10:21:13 +01:00
|
|
|
tags: [],
|
|
|
|
is_admin: false,
|
2019-02-27 14:01:10 +01:00
|
|
|
is_moderator: false,
|
2019-04-24 19:01:42 +02:00
|
|
|
hide_favorites: true,
|
|
|
|
hide_followers: false,
|
|
|
|
hide_follows: false,
|
2019-06-03 21:51:14 +02:00
|
|
|
relationship: %{},
|
|
|
|
skip_thread_containment: false
|
2018-12-18 12:07:05 +01:00
|
|
|
}
|
2017-09-09 12:09:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
assert expected == AccountView.render("account.json", %{user: user})
|
|
|
|
end
|
|
|
|
|
|
|
|
test "Represent a smaller mention" do
|
|
|
|
user = insert(:user)
|
|
|
|
|
|
|
|
expected = %{
|
2017-11-10 17:18:19 +01:00
|
|
|
id: to_string(user.id),
|
2017-09-09 12:09:53 +02:00
|
|
|
acct: user.nickname,
|
|
|
|
username: user.nickname,
|
|
|
|
url: user.ap_id
|
|
|
|
}
|
|
|
|
|
|
|
|
assert expected == AccountView.render("mention.json", %{user: user})
|
|
|
|
end
|
2017-09-13 15:55:10 +02:00
|
|
|
|
|
|
|
test "represent a relationship" do
|
|
|
|
user = insert(:user)
|
|
|
|
other_user = insert(:user)
|
|
|
|
|
|
|
|
{:ok, user} = User.follow(user, other_user)
|
2017-11-03 08:23:31 +01:00
|
|
|
{:ok, user} = User.block(user, other_user)
|
2017-09-13 15:55:10 +02:00
|
|
|
|
|
|
|
expected = %{
|
2017-11-10 17:18:19 +01:00
|
|
|
id: to_string(other_user.id),
|
2018-06-19 10:53:54 +02:00
|
|
|
following: false,
|
2017-09-13 16:05:39 +02:00
|
|
|
followed_by: false,
|
2017-11-03 08:23:31 +01:00
|
|
|
blocking: true,
|
2017-09-13 15:55:10 +02:00
|
|
|
muting: false,
|
2018-09-05 20:13:50 +02:00
|
|
|
muting_notifications: false,
|
2019-04-05 17:51:45 +02:00
|
|
|
subscribing: false,
|
2017-09-13 15:55:10 +02:00
|
|
|
requested: false,
|
2018-09-05 20:13:50 +02:00
|
|
|
domain_blocking: false,
|
2019-03-09 14:22:55 +01:00
|
|
|
showing_reblogs: true,
|
2018-09-20 16:22:31 +02:00
|
|
|
endorsed: false
|
2017-09-13 15:55:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
assert expected == AccountView.render("relationship.json", %{user: user, target: other_user})
|
|
|
|
end
|
2019-02-27 14:01:10 +01:00
|
|
|
|
|
|
|
test "represent an embedded relationship" do
|
|
|
|
user =
|
|
|
|
insert(:user, %{
|
2019-04-22 09:20:43 +02:00
|
|
|
info: %{note_count: 5, follower_count: 0, source_data: %{"type" => "Service"}},
|
2019-02-27 14:01:10 +01:00
|
|
|
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 09:20:43 +02:00
|
|
|
{:ok, _} = User.follow(insert(:user), user)
|
2019-02-27 14:01:10 +01:00
|
|
|
|
|
|
|
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 09:20:43 +02:00
|
|
|
followers_count: 1,
|
2019-02-27 14:01:10 +01:00
|
|
|
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: %{
|
2019-05-22 07:22:19 +02:00
|
|
|
note: user.bio,
|
2019-04-25 08:14:35 +02:00
|
|
|
sensitive: false,
|
|
|
|
pleroma: %{}
|
2019-02-27 14:01:10 +01:00
|
|
|
},
|
|
|
|
pleroma: %{
|
2019-06-13 19:08:05 +02:00
|
|
|
background_image: nil,
|
2019-02-27 14:01:10 +01:00
|
|
|
confirmation_pending: false,
|
|
|
|
tags: [],
|
|
|
|
is_admin: false,
|
|
|
|
is_moderator: false,
|
2019-04-24 19:01:42 +02:00
|
|
|
hide_favorites: true,
|
|
|
|
hide_followers: false,
|
|
|
|
hide_follows: false,
|
2019-02-27 14:01:10 +01:00
|
|
|
relationship: %{
|
|
|
|
id: to_string(user.id),
|
|
|
|
following: false,
|
|
|
|
followed_by: false,
|
|
|
|
blocking: true,
|
2019-04-05 17:51:45 +02:00
|
|
|
subscribing: false,
|
2019-02-27 14:01:10 +01:00
|
|
|
muting: false,
|
|
|
|
muting_notifications: false,
|
|
|
|
requested: false,
|
|
|
|
domain_blocking: false,
|
2019-03-09 14:22:55 +01:00
|
|
|
showing_reblogs: true,
|
2019-02-27 14:01:10 +01:00
|
|
|
endorsed: false
|
2019-06-03 21:51:14 +02:00
|
|
|
},
|
|
|
|
skip_thread_containment: false
|
2019-02-27 14:01:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
assert expected == AccountView.render("account.json", %{user: user, for: other_user})
|
|
|
|
end
|
2019-05-31 14:27:15 +02:00
|
|
|
|
|
|
|
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})
|
|
|
|
|
2019-05-31 14:49:46 +02:00
|
|
|
assert result.pleroma.settings_store == %{:fe => "test"}
|
2019-05-31 14:27:15 +02:00
|
|
|
|
|
|
|
result = AccountView.render("account.json", %{user: user, with_pleroma_settings: true})
|
2019-05-31 14:49:46 +02:00
|
|
|
assert result.pleroma[:settings_store] == nil
|
2019-05-31 14:27:15 +02:00
|
|
|
|
|
|
|
result = AccountView.render("account.json", %{user: user, for: user})
|
2019-05-31 14:49:46 +02:00
|
|
|
assert result.pleroma[:settings_store] == nil
|
2019-05-31 14:27:15 +02:00
|
|
|
end
|
2017-09-09 12:09:53 +02:00
|
|
|
end
|