logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: 3211557f742e07d5144426a71c39267480656a38
parent b1ef6e5e9ad5afc9d556a4d88ff34c9b62f5fea2
Author: Mark Felder <feld@feld.me>
Date:   Sat,  8 Jun 2024 20:30:43 -0400

Render nice web push notifications for polls

Diffstat:

Achangelog.d/webpush-polls.change1+
Mlib/pleroma/web/push/impl.ex19+++++++++++++++++++
Mtest/pleroma/web/push/impl_test.exs21+++++++++++++++++++++
Mtest/support/factory.ex1+
4 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/changelog.d/webpush-polls.change b/changelog.d/webpush-polls.change @@ -0,0 +1 @@ +Render nice web push notifications for polls diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex @@ -131,6 +131,24 @@ defmodule Pleroma.Web.Push.Impl do end def format_body( + %{type: "poll"} = _notification, + _user, + %{data: %{"content" => content} = data} = _object + ) do + options = Map.get(data, "anyOf") || Map.get(data, "oneOf") + + content_text = content <> "\n" + + options_text = + Enum.map(options, fn x -> "○ #{x["name"]}" end) + |> Enum.join("\n") + + [content_text, options_text] + |> Enum.join("\n") + |> Utils.scrub_html_and_truncate(80) + end + + def format_body( %{activity: %{data: %{"type" => "Create"}}}, user, %{data: %{"content" => content}} @@ -191,6 +209,7 @@ defmodule Pleroma.Web.Push.Impl do "update" -> "New Update" "pleroma:chat_mention" -> "New Chat Message" "pleroma:emoji_reaction" -> "New Reaction" + "poll" -> "Poll Results" type -> "New #{String.capitalize(type || "event")}" end end diff --git a/test/pleroma/web/push/impl_test.exs b/test/pleroma/web/push/impl_test.exs @@ -232,6 +232,27 @@ defmodule Pleroma.Web.Push.ImplTest do "New Direct Message" end + test "renders poll notification" do + user = insert(:user) + question = insert(:question, user: user) + activity = insert(:question_activity, question: question) + + {:ok, [notification]} = Notification.create_poll_notifications(activity) + + assert Impl.format_title(notification) == "Poll Results" + + expected_body = + """ + Which flavor of ice cream do you prefer? + + ○ chocolate + ○ vanilla + """ + |> String.trim_trailing("\n") + + assert Impl.format_body(notification, user, question) == expected_body + end + describe "build_content/3" do test "builds content for chat messages" do user = insert(:user) diff --git a/test/support/factory.ex b/test/support/factory.ex @@ -249,6 +249,7 @@ defmodule Pleroma.Factory do "cc" => [user.follower_address], "context" => Pleroma.Web.ActivityPub.Utils.generate_context_id(), "closed" => DateTime.utc_now() |> DateTime.add(86_400) |> DateTime.to_iso8601(), + "content" => "Which flavor of ice cream do you prefer?", "oneOf" => [ %{ "type" => "Note",