mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-22 16:16:34 +00:00
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:
commit
9d67827619
5 changed files with 35 additions and 8 deletions
1
changelog.d/stream-end-poll.fix
Normal file
1
changelog.d/stream-end-poll.fix
Normal file
|
@ -0,0 +1 @@
|
|||
End of poll notifications were not streamed over websockets or web push
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
defmodule Pleroma.NotificationTest do
|
||||
use Pleroma.DataCase, async: false
|
||||
|
||||
import Mock
|
||||
import Pleroma.Factory
|
||||
|
||||
alias Pleroma.FollowingRelationship
|
||||
|
@ -183,10 +184,32 @@ defmodule Pleroma.NotificationTest do
|
|||
{:ok, _, _} = CommonAPI.vote(user2, question, [0])
|
||||
{:ok, _, _} = CommonAPI.vote(user3, question, [1])
|
||||
|
||||
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)
|
||||
end
|
||||
end
|
||||
|
||||
describe "create_notification" do
|
||||
test "it disables notifications from strangers" do
|
||||
|
|
Loading…
Reference in a new issue