mastodon api: embed relationship card under account card for Pleroma FE convenience

This commit is contained in:
William Pitcock 2019-02-27 13:01:10 +00:00
parent 14bc6bd40f
commit 1536640962
2 changed files with 73 additions and 4 deletions

View File

@ -32,7 +32,11 @@ def render("mention.json", %{user: user}) do
} }
end end
def render("relationship.json", %{user: user, target: target}) do def render("relationship.json", %{user: nil, target: _target}) do
%{}
end
def render("relationship.json", %{user: %User{} = user, target: %User{} = target}) do
follow_activity = Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(user, target) follow_activity = Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(user, target)
requested = requested =
@ -85,6 +89,8 @@ defp do_render("account.json", %{user: user} = opts) do
bio = HTML.filter_tags(user.bio, User.html_filter_policy(opts[:for])) bio = HTML.filter_tags(user.bio, User.html_filter_policy(opts[:for]))
relationship = render("relationship.json", %{user: opts[:for], target: user})
%{ %{
id: to_string(user.id), id: to_string(user.id),
username: username_from_nickname(user.nickname), username: username_from_nickname(user.nickname),
@ -115,7 +121,8 @@ defp do_render("account.json", %{user: user} = opts) do
confirmation_pending: user_info.confirmation_pending, confirmation_pending: user_info.confirmation_pending,
tags: user.tags, tags: user.tags,
is_moderator: user.info.is_moderator, is_moderator: user.info.is_moderator,
is_admin: user.info.is_admin is_admin: user.info.is_admin,
relationship: relationship
} }
} }
end end

View File

@ -63,7 +63,8 @@ test "Represent a user account" do
confirmation_pending: false, confirmation_pending: false,
tags: [], tags: [],
is_admin: false, is_admin: false,
is_moderator: false is_moderator: false,
relationship: %{}
} }
} }
@ -106,7 +107,8 @@ test "Represent a Service(bot) account" do
confirmation_pending: false, confirmation_pending: false,
tags: [], tags: [],
is_admin: false, is_admin: false,
is_moderator: false is_moderator: false,
relationship: %{}
} }
} }
@ -148,4 +150,64 @@ test "represent a relationship" do
assert expected == AccountView.render("relationship.json", %{user: user, target: other_user}) assert expected == AccountView.render("relationship.json", %{user: user, target: other_user})
end end
test "represent an embedded relationship" 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]
})
other_user = insert(:user)
{:ok, other_user} = User.follow(other_user, user)
{:ok, other_user} = User.block(other_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: 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: "",
privacy: "public",
sensitive: false
},
pleroma: %{
confirmation_pending: false,
tags: [],
is_admin: false,
is_moderator: false,
relationship: %{
id: to_string(user.id),
following: false,
followed_by: false,
blocking: true,
muting: false,
muting_notifications: false,
requested: false,
domain_blocking: false,
showing_reblogs: false,
endorsed: false
}
}
}
assert expected == AccountView.render("account.json", %{user: user, for: other_user})
end
end end