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
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
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
stream(notifications)
|
||||||
|
|
||||||
{:ok, notifications}
|
{:ok, notifications}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -757,8 +759,9 @@ defmodule Pleroma.Notification do
|
|||||||
|> Repo.update_all(set: [seen: true])
|
|> Repo.update_all(set: [seen: true])
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec send(list(Notification.t())) :: :ok
|
@doc "Streams a list of notifications over websockets and web push"
|
||||||
def send(notifications) do
|
@spec stream(list(Notification.t())) :: :ok
|
||||||
|
def stream(notifications) do
|
||||||
Enum.each(notifications, fn notification ->
|
Enum.each(notifications, fn notification ->
|
||||||
Streamer.stream(["user", "user:notification"], notification)
|
Streamer.stream(["user", "user:notification"], notification)
|
||||||
Push.send(notification)
|
Push.send(notification)
|
||||||
|
@ -201,7 +201,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
|||||||
|
|
||||||
def notify_and_stream(activity) do
|
def notify_and_stream(activity) do
|
||||||
{:ok, notifications} = Notification.create_notifications(activity)
|
{:ok, notifications} = Notification.create_notifications(activity)
|
||||||
Notification.send(notifications)
|
Notification.stream(notifications)
|
||||||
|
|
||||||
original_activity =
|
original_activity =
|
||||||
case activity do
|
case activity do
|
||||||
|
@ -592,9 +592,9 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
|
|||||||
with {:ok, _} <- Repo.delete(object), do: :ok
|
with {:ok, _} <- Repo.delete(object), do: :ok
|
||||||
end
|
end
|
||||||
|
|
||||||
defp send_notifications(meta) do
|
defp stream_notifications(meta) do
|
||||||
Keyword.get(meta, :notifications, [])
|
Keyword.get(meta, :notifications, [])
|
||||||
|> Notification.send()
|
|> Notification.stream()
|
||||||
|
|
||||||
meta
|
meta
|
||||||
end
|
end
|
||||||
@ -625,7 +625,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
|
|||||||
@impl true
|
@impl true
|
||||||
def handle_after_transaction(meta) do
|
def handle_after_transaction(meta) do
|
||||||
meta
|
meta
|
||||||
|> send_notifications()
|
|> stream_notifications()
|
||||||
|> send_streamables()
|
|> send_streamables()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
defmodule Pleroma.NotificationTest do
|
defmodule Pleroma.NotificationTest do
|
||||||
use Pleroma.DataCase, async: false
|
use Pleroma.DataCase, async: false
|
||||||
|
|
||||||
|
import Mock
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
alias Pleroma.FollowingRelationship
|
alias Pleroma.FollowingRelationship
|
||||||
@ -183,10 +184,32 @@ defmodule Pleroma.NotificationTest do
|
|||||||
{:ok, _, _} = CommonAPI.vote(user2, question, [0])
|
{:ok, _, _} = CommonAPI.vote(user2, question, [0])
|
||||||
{:ok, _, _} = CommonAPI.vote(user3, question, [1])
|
{: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)
|
{: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
|
||||||
|
end
|
||||||
|
|
||||||
describe "create_notification" do
|
describe "create_notification" do
|
||||||
test "it disables notifications from strangers" do
|
test "it disables notifications from strangers" do
|
||||||
|
Loading…
Reference in New Issue
Block a user