commit: 9d67827619e7f770d7dd6cea98ad33f5cfa33991
parent c24e222887808ea7e2080ad54dea340212a5e9df
Author: feld <feld@feld.me>
Date: Sat, 8 Jun 2024 17:55:01 +0000
Merge branch 'stream-poll-end' into 'develop'
Stream end of poll notification over websockets and web push
See merge request pleroma/pleroma!4137
Diffstat:
5 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/changelog.d/stream-end-poll.fix b/changelog.d/stream-end-poll.fix
@@ -0,0 +1 @@
+End of poll notifications were not streamed over websockets or web push
diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex
@@ -479,6 +479,8 @@ defmodule Pleroma.Notification do
end
end)
+ stream(notifications)
+
{:ok, notifications}
end
end
@@ -757,8 +759,9 @@ defmodule Pleroma.Notification do
|> Repo.update_all(set: [seen: true])
end
- @spec send(list(Notification.t())) :: :ok
- def send(notifications) do
+ @doc "Streams a list of notifications over websockets and web push"
+ @spec stream(list(Notification.t())) :: :ok
+ def stream(notifications) do
Enum.each(notifications, fn notification ->
Streamer.stream(["user", "user:notification"], notification)
Push.send(notification)
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -201,7 +201,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
def notify_and_stream(activity) do
{:ok, notifications} = Notification.create_notifications(activity)
- Notification.send(notifications)
+ Notification.stream(notifications)
original_activity =
case activity do
diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex
@@ -592,9 +592,9 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
with {:ok, _} <- Repo.delete(object), do: :ok
end
- defp send_notifications(meta) do
+ defp stream_notifications(meta) do
Keyword.get(meta, :notifications, [])
- |> Notification.send()
+ |> Notification.stream()
meta
end
@@ -625,7 +625,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
@impl true
def handle_after_transaction(meta) do
meta
- |> send_notifications()
+ |> stream_notifications()
|> send_streamables()
end
end
diff --git a/test/pleroma/notification_test.exs b/test/pleroma/notification_test.exs
@@ -5,6 +5,7 @@
defmodule Pleroma.NotificationTest do
use Pleroma.DataCase, async: false
+ import Mock
import Pleroma.Factory
alias Pleroma.FollowingRelationship
@@ -183,9 +184,31 @@ defmodule Pleroma.NotificationTest do
{:ok, _, _} = CommonAPI.vote(user2, question, [0])
{:ok, _, _} = CommonAPI.vote(user3, question, [1])
- {:ok, notifications} = Notification.create_poll_notifications(activity)
+ with_mocks([
+ {
+ Pleroma.Web.Streamer,
+ [],
+ [
+ stream: fn _, _ -> nil end
+ ]
+ },
+ {
+ Pleroma.Web.Push,
+ [],
+ [
+ send: fn _ -> nil end
+ ]
+ }
+ ]) do
+ {:ok, notifications} = Notification.create_poll_notifications(activity)
+
+ Enum.each(notifications, fn notification ->
+ assert called(Pleroma.Web.Streamer.stream(["user", "user:notification"], notification))
+ assert called(Pleroma.Web.Push.send(notification))
+ end)
- assert [user2.id, user3.id, user1.id] == Enum.map(notifications, & &1.user_id)
+ assert [user2.id, user3.id, user1.id] == Enum.map(notifications, & &1.user_id)
+ end
end
describe "create_notification" do