forked from AkkomaGang/akkoma
Add a view for the move notification
This commit is contained in:
parent
3c0abfca53
commit
1fc28a4b44
6 changed files with 77 additions and 25 deletions
|
@ -92,6 +92,12 @@ Has these additional fields under the `pleroma` object:
|
||||||
|
|
||||||
- `is_seen`: true if the notification was read by the user
|
- `is_seen`: true if the notification was read by the user
|
||||||
|
|
||||||
|
### Move Notification
|
||||||
|
|
||||||
|
The `type` value is `move`. Has an additional field:
|
||||||
|
|
||||||
|
- `target`: new account
|
||||||
|
|
||||||
## GET `/api/v1/notifications`
|
## GET `/api/v1/notifications`
|
||||||
|
|
||||||
Accepts additional parameters:
|
Accepts additional parameters:
|
||||||
|
|
|
@ -28,7 +28,8 @@ defmodule Pleroma.Activity do
|
||||||
"Create" => "mention",
|
"Create" => "mention",
|
||||||
"Follow" => "follow",
|
"Follow" => "follow",
|
||||||
"Announce" => "reblog",
|
"Announce" => "reblog",
|
||||||
"Like" => "favourite"
|
"Like" => "favourite",
|
||||||
|
"Move" => "move"
|
||||||
}
|
}
|
||||||
|
|
||||||
@mastodon_to_ap_notification_types for {k, v} <- @mastodon_notification_types,
|
@mastodon_to_ap_notification_types for {k, v} <- @mastodon_notification_types,
|
||||||
|
|
|
@ -37,32 +37,24 @@ def render("show.json", %{
|
||||||
}
|
}
|
||||||
|
|
||||||
case mastodon_type do
|
case mastodon_type do
|
||||||
"mention" ->
|
"mention" -> put_status(response, activity, user)
|
||||||
response
|
"favourite" -> put_status(response, parent_activity, user)
|
||||||
|> Map.merge(%{
|
"reblog" -> put_status(response, parent_activity, user)
|
||||||
status: StatusView.render("show.json", %{activity: activity, for: user})
|
"move" -> put_target(response, activity, user)
|
||||||
})
|
"follow" -> response
|
||||||
|
_ -> nil
|
||||||
"favourite" ->
|
|
||||||
response
|
|
||||||
|> Map.merge(%{
|
|
||||||
status: StatusView.render("show.json", %{activity: parent_activity, for: user})
|
|
||||||
})
|
|
||||||
|
|
||||||
"reblog" ->
|
|
||||||
response
|
|
||||||
|> Map.merge(%{
|
|
||||||
status: StatusView.render("show.json", %{activity: parent_activity, for: user})
|
|
||||||
})
|
|
||||||
|
|
||||||
"follow" ->
|
|
||||||
response
|
|
||||||
|
|
||||||
_ ->
|
|
||||||
nil
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
_ -> nil
|
_ -> nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp put_status(response, activity, user) do
|
||||||
|
Map.put(response, :status, StatusView.render("show.json", %{activity: activity, for: user}))
|
||||||
|
end
|
||||||
|
|
||||||
|
defp put_target(response, activity, user) do
|
||||||
|
target = User.get_cached_by_ap_id(activity.data["target"])
|
||||||
|
Map.put(response, :target, AccountView.render("show.json", %{user: target, for: user}))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ defmodule Pleroma.Web.Push.Impl do
|
||||||
require Logger
|
require Logger
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
@types ["Create", "Follow", "Announce", "Like"]
|
@types ["Create", "Follow", "Announce", "Like", "Move"]
|
||||||
|
|
||||||
@doc "Performs sending notifications for user subscriptions"
|
@doc "Performs sending notifications for user subscriptions"
|
||||||
@spec perform(Notification.t()) :: list(any) | :error
|
@spec perform(Notification.t()) :: list(any) | :error
|
||||||
|
|
|
@ -630,6 +630,35 @@ test "notifications are deleted if a remote user is deleted" do
|
||||||
|
|
||||||
assert Enum.empty?(Notification.for_user(local_user))
|
assert Enum.empty?(Notification.for_user(local_user))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "move activity generates a notification" do
|
||||||
|
%{ap_id: old_ap_id} = old_user = insert(:user)
|
||||||
|
%{ap_id: new_ap_id} = new_user = insert(:user, also_known_as: [old_ap_id])
|
||||||
|
follower = insert(:user)
|
||||||
|
other_follower = insert(:user, %{allow_following_move: false})
|
||||||
|
|
||||||
|
User.follow(follower, old_user)
|
||||||
|
User.follow(other_follower, old_user)
|
||||||
|
|
||||||
|
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
||||||
|
ObanHelpers.perform_all()
|
||||||
|
|
||||||
|
assert [
|
||||||
|
%{
|
||||||
|
activity: %{
|
||||||
|
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
] = Notification.for_user(follower)
|
||||||
|
|
||||||
|
assert [
|
||||||
|
%{
|
||||||
|
activity: %{
|
||||||
|
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
] = Notification.for_user(other_follower)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "for_user" do
|
describe "for_user" do
|
||||||
|
|
|
@ -107,4 +107,28 @@ test "Follow notification" do
|
||||||
assert [] ==
|
assert [] ==
|
||||||
NotificationView.render("index.json", %{notifications: [notification], for: followed})
|
NotificationView.render("index.json", %{notifications: [notification], for: followed})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "Move notification" do
|
||||||
|
%{ap_id: old_ap_id} = old_user = insert(:user)
|
||||||
|
%{ap_id: _new_ap_id} = new_user = insert(:user, also_known_as: [old_ap_id])
|
||||||
|
follower = insert(:user)
|
||||||
|
|
||||||
|
User.follow(follower, old_user)
|
||||||
|
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
||||||
|
Pleroma.Tests.ObanHelpers.perform_all()
|
||||||
|
|
||||||
|
[notification] = Notification.for_user(follower)
|
||||||
|
|
||||||
|
expected = %{
|
||||||
|
id: to_string(notification.id),
|
||||||
|
pleroma: %{is_seen: false},
|
||||||
|
type: "move",
|
||||||
|
account: AccountView.render("show.json", %{user: old_user, for: follower}),
|
||||||
|
target: AccountView.render("show.json", %{user: new_user, for: follower}),
|
||||||
|
created_at: Utils.to_masto_date(notification.inserted_at)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert [expected] ==
|
||||||
|
NotificationView.render("index.json", %{notifications: [notification], for: follower})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue