Browse Source

Merge branch '1976-status-view-fixes' into 'develop'

StatusView: Handle badly formatted emoji reactions.

Closes #1976

See merge request pleroma/pleroma!2788
chores/our-libs-hex-releases
Haelwenn 4 years ago
parent
commit
6100b90209
2 changed files with 35 additions and 6 deletions
  1. +18
    -6
      lib/pleroma/web/mastodon_api/views/status_view.ex
  2. +17
    -0
      test/web/mastodon_api/views/status_view_test.exs

+ 18
- 6
lib/pleroma/web/mastodon_api/views/status_view.ex View File

@@ -297,13 +297,17 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do

emoji_reactions =
with %{data: %{"reactions" => emoji_reactions}} <- object do
Enum.map(emoji_reactions, fn [emoji, users] ->
%{
name: emoji,
count: length(users),
me: !!(opts[:for] && opts[:for].ap_id in users)
}
Enum.map(emoji_reactions, fn
[emoji, users] when is_list(users) ->
build_emoji_map(emoji, users, opts[:for])

{emoji, users} when is_list(users) ->
build_emoji_map(emoji, users, opts[:for])

_ ->
nil
end)
|> Enum.reject(&is_nil/1)
else
_ -> []
end
@@ -545,4 +549,12 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do

defp pinned?(%Activity{id: id}, %User{pinned_activities: pinned_activities}),
do: id in pinned_activities

defp build_emoji_map(emoji, users, current_user) do
%{
name: emoji,
count: length(users),
me: !!(current_user && current_user.ap_id in users)
}
end
end

+ 17
- 0
test/web/mastodon_api/views/status_view_test.exs View File

@@ -56,6 +56,23 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
]
end

test "works correctly with badly formatted emojis" do
user = insert(:user)
{:ok, activity} = CommonAPI.post(user, %{status: "yo"})

activity
|> Object.normalize(false)
|> Object.update_data(%{"reactions" => %{"☕" => [user.ap_id], "x" => 1}})

activity = Activity.get_by_id(activity.id)

status = StatusView.render("show.json", activity: activity, for: user)

assert status[:pleroma][:emoji_reactions] == [
%{name: "☕", count: 1, me: true}
]
end

test "loads and returns the direct conversation id when given the `with_direct_conversation_id` option" do
user = insert(:user)



Loading…
Cancel
Save