forked from AkkomaGang/akkoma
mastodon api: embed relationship card under account card for Pleroma FE convenience
This commit is contained in:
parent
14bc6bd40f
commit
1536640962
2 changed files with 73 additions and 4 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue