aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Felder <feld@feld.me>2021-01-22 09:47:59 -0600
committerMark Felder <feld@feld.me>2021-01-22 09:47:59 -0600
commit6bfd497f4afeb4182cc865087e6f4863bc48a4f4 (patch)
treed48c9c04ff0c83b85d2ff0bae7c940a8f4b14543
parentd8860eaee46c9bc0a079e90dfb008c54923d7330 (diff)
downloadpleroma-6bfd497f4afeb4182cc865087e6f4863bc48a4f4.tar.gz
Include own_votes in the poll data
-rw-r--r--CHANGELOG.md1
-rw-r--r--lib/pleroma/web/mastodon_api/views/poll_view.ex27
-rw-r--r--test/pleroma/web/mastodon_api/views/poll_view_test.exs6
3 files changed, 27 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e1dfeae01..328a7c28c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -59,6 +59,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
<summary>API Changes</summary>
- Mastodon API: Current user is now included in conversation if it's the only participant.
- Mastodon API: Fixed last_status.account being not filled with account data.
+ - Mastodon API: Fixed own_votes being not returned with poll data.
</details>
## Unreleased (Patch)
diff --git a/lib/pleroma/web/mastodon_api/views/poll_view.ex b/lib/pleroma/web/mastodon_api/views/poll_view.ex
index d6b544037..94bc1c139 100644
--- a/lib/pleroma/web/mastodon_api/views/poll_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/poll_view.ex
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.MastodonAPI.PollView do
def render("show.json", %{object: object, multiple: multiple, options: options} = params) do
{end_time, expired} = end_time_and_expired(object)
{options, votes_count} = options_and_votes_count(options)
+ {voted, own_votes} = voted_and_own_votes(params, options)
%{
# Mastodon uses separate ids for polls, but an object can't have
@@ -21,7 +22,8 @@ defmodule Pleroma.Web.MastodonAPI.PollView do
votes_count: votes_count,
voters_count: voters_count(object),
options: options,
- voted: voted?(params),
+ voted: voted,
+ own_votes: own_votes,
emojis: Pleroma.Web.MastodonAPI.StatusView.build_emojis(object.data["emoji"])
}
end
@@ -67,12 +69,25 @@ defmodule Pleroma.Web.MastodonAPI.PollView do
defp voters_count(_), do: 0
- defp voted?(%{object: object} = opts) do
- if opts[:for] do
- existing_votes = Pleroma.Web.ActivityPub.Utils.get_existing_votes(opts[:for].ap_id, object)
- existing_votes != [] or opts[:for].ap_id == object.data["actor"]
+ defp voted_and_own_votes(%{object: object} = params, options) do
+ options = options |> Enum.map(fn x -> Map.get(x, :title) end)
+
+ if params[:for] do
+ existing_votes =
+ Pleroma.Web.ActivityPub.Utils.get_existing_votes(params[:for].ap_id, object)
+
+ own_votes =
+ for vote <- existing_votes do
+ data = Map.get(vote, :object) |> Map.get(:data)
+
+ Enum.find_index(options, fn x -> x == data["name"] end)
+ end || []
+
+ voted = existing_votes != [] or params[:for].ap_id == object.data["actor"]
+
+ {voted, own_votes}
else
- false
+ {false, []}
end
end
end
diff --git a/test/pleroma/web/mastodon_api/views/poll_view_test.exs b/test/pleroma/web/mastodon_api/views/poll_view_test.exs
index a8600e1c2..f087d50e8 100644
--- a/test/pleroma/web/mastodon_api/views/poll_view_test.exs
+++ b/test/pleroma/web/mastodon_api/views/poll_view_test.exs
@@ -44,7 +44,8 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do
],
voted: false,
votes_count: 0,
- voters_count: 0
+ voters_count: 0,
+ own_votes: []
}
result = PollView.render("show.json", %{object: object})
@@ -123,7 +124,10 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do
result = PollView.render("show.json", %{object: object, for: other_user})
+ _own_votes = result[:own_votes]
+
assert result[:voted] == true
+ assert own_votes = [1, 2]
assert Enum.at(result[:options], 1)[:votes_count] == 1
assert Enum.at(result[:options], 2)[:votes_count] == 1
end