Merge branch 'stream-poll-end' into 'develop'

Stream end of poll notification over websockets and web push

See merge request pleroma/pleroma!4137
This commit is contained in:
feld 2024-06-08 17:55:01 +00:00
commit 9d67827619
5 changed files with 35 additions and 8 deletions

View file

@ -0,0 +1 @@
End of poll notifications were not streamed over websockets or web push

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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)
assert [user2.id, user3.id, user1.id] == Enum.map(notifications, & &1.user_id)
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)
end
end
describe "create_notification" do