forked from AkkomaGang/akkoma
Add with_move
query param to the notifications API
This commit is contained in:
parent
7722e5a67a
commit
624e720aa4
6 changed files with 55 additions and 15 deletions
|
@ -57,6 +57,7 @@ def for_user_query(user, opts \\ []) do
|
||||||
|> exclude_muted(user, opts)
|
|> exclude_muted(user, opts)
|
||||||
|> exclude_blocked(user)
|
|> exclude_blocked(user)
|
||||||
|> exclude_visibility(opts)
|
|> exclude_visibility(opts)
|
||||||
|
|> exclude_move(opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp exclude_blocked(query, user) do
|
defp exclude_blocked(query, user) do
|
||||||
|
@ -81,6 +82,14 @@ defp exclude_muted(query, user, _opts) do
|
||||||
|> where([n, a, o, tm], is_nil(tm.user_id))
|
|> where([n, a, o, tm], is_nil(tm.user_id))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp exclude_move(query, %{with_move: true}) do
|
||||||
|
query
|
||||||
|
end
|
||||||
|
|
||||||
|
defp exclude_move(query, _opts) do
|
||||||
|
where(query, [n, a], fragment("?->>'type' != 'Move'", a.data))
|
||||||
|
end
|
||||||
|
|
||||||
@valid_visibilities ~w[direct unlisted public private]
|
@valid_visibilities ~w[direct unlisted public private]
|
||||||
|
|
||||||
defp exclude_visibility(query, %{exclude_visibilities: visibility})
|
defp exclude_visibility(query, %{exclude_visibilities: visibility})
|
||||||
|
|
|
@ -73,7 +73,8 @@ defp cast_params(params) do
|
||||||
exclude_types: {:array, :string},
|
exclude_types: {:array, :string},
|
||||||
exclude_visibilities: {:array, :string},
|
exclude_visibilities: {:array, :string},
|
||||||
reblogs: :boolean,
|
reblogs: :boolean,
|
||||||
with_muted: :boolean
|
with_muted: :boolean,
|
||||||
|
with_move: :boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
changeset = cast({%{}, param_types}, params, Map.keys(param_types))
|
changeset = cast({%{}, param_types}, params, Map.keys(param_types))
|
||||||
|
|
|
@ -643,13 +643,7 @@ test "move activity generates a notification" do
|
||||||
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
||||||
ObanHelpers.perform_all()
|
ObanHelpers.perform_all()
|
||||||
|
|
||||||
assert [
|
assert [] = Notification.for_user(follower)
|
||||||
%{
|
|
||||||
activity: %{
|
|
||||||
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
] = Notification.for_user(follower)
|
|
||||||
|
|
||||||
assert [
|
assert [
|
||||||
%{
|
%{
|
||||||
|
@ -657,7 +651,17 @@ test "move activity generates a notification" do
|
||||||
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
] = Notification.for_user(other_follower)
|
] = Notification.for_user(follower, %{with_move: true})
|
||||||
|
|
||||||
|
assert [] = Notification.for_user(other_follower)
|
||||||
|
|
||||||
|
assert [
|
||||||
|
%{
|
||||||
|
activity: %{
|
||||||
|
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
] = Notification.for_user(other_follower, %{with_move: true})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1619,10 +1619,10 @@ test "create" do
|
||||||
activity = %Activity{activity | object: nil}
|
activity = %Activity{activity | object: nil}
|
||||||
|
|
||||||
assert [%Notification{activity: ^activity}] =
|
assert [%Notification{activity: ^activity}] =
|
||||||
Notification.for_user_since(follower, ~N[2019-04-13 11:22:33])
|
Notification.for_user(follower, %{with_move: true})
|
||||||
|
|
||||||
assert [%Notification{activity: ^activity}] =
|
assert [%Notification{activity: ^activity}] =
|
||||||
Notification.for_user_since(follower_move_opted_out, ~N[2019-04-13 11:22:33])
|
Notification.for_user(follower_move_opted_out, %{with_move: true})
|
||||||
end
|
end
|
||||||
|
|
||||||
test "old user must be in the new user's `also_known_as` list" do
|
test "old user must be in the new user's `also_known_as` list" do
|
||||||
|
|
|
@ -341,6 +341,32 @@ test "see notifications after muting user with notifications and with_muted para
|
||||||
assert length(json_response(conn, 200)) == 1
|
assert length(json_response(conn, 200)) == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "see move notifications with `with_move` parameter", %{
|
||||||
|
conn: conn
|
||||||
|
} do
|
||||||
|
old_user = insert(:user)
|
||||||
|
new_user = insert(:user, also_known_as: [old_user.ap_id])
|
||||||
|
follower = insert(:user)
|
||||||
|
|
||||||
|
User.follow(follower, old_user)
|
||||||
|
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
||||||
|
Pleroma.Tests.ObanHelpers.perform_all()
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, follower)
|
||||||
|
|> get("/api/v1/notifications")
|
||||||
|
|
||||||
|
assert json_response(conn, 200) == []
|
||||||
|
|
||||||
|
conn =
|
||||||
|
build_conn()
|
||||||
|
|> assign(:user, follower)
|
||||||
|
|> get("/api/v1/notifications", %{"with_move" => "true"})
|
||||||
|
|
||||||
|
assert length(json_response(conn, 200)) == 1
|
||||||
|
end
|
||||||
|
|
||||||
defp get_notification_id_by_activity(%{id: id}) do
|
defp get_notification_id_by_activity(%{id: id}) do
|
||||||
Notification
|
Notification
|
||||||
|> Repo.get_by(activity_id: id)
|
|> Repo.get_by(activity_id: id)
|
||||||
|
|
|
@ -109,22 +109,22 @@ test "Follow notification" do
|
||||||
end
|
end
|
||||||
|
|
||||||
test "Move notification" do
|
test "Move notification" do
|
||||||
%{ap_id: old_ap_id} = old_user = insert(:user)
|
old_user = insert(:user)
|
||||||
%{ap_id: _new_ap_id} = new_user = insert(:user, also_known_as: [old_ap_id])
|
new_user = insert(:user, also_known_as: [old_user.ap_id])
|
||||||
follower = insert(:user)
|
follower = insert(:user)
|
||||||
|
|
||||||
User.follow(follower, old_user)
|
User.follow(follower, old_user)
|
||||||
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
|
||||||
Pleroma.Tests.ObanHelpers.perform_all()
|
Pleroma.Tests.ObanHelpers.perform_all()
|
||||||
|
|
||||||
[notification] = Notification.for_user(follower)
|
[notification] = Notification.for_user(follower, %{with_move: true})
|
||||||
|
|
||||||
expected = %{
|
expected = %{
|
||||||
id: to_string(notification.id),
|
id: to_string(notification.id),
|
||||||
pleroma: %{is_seen: false},
|
pleroma: %{is_seen: false},
|
||||||
type: "move",
|
type: "move",
|
||||||
account: AccountView.render("show.json", %{user: old_user, for: follower}),
|
account: AccountView.render("show.json", %{user: old_user, for: follower}),
|
||||||
target: AccountView.render("show.json", %{user: new_user, for: follower}),
|
target: AccountView.render("show.json", %{user: refresh_record(new_user), for: follower}),
|
||||||
created_at: Utils.to_masto_date(notification.inserted_at)
|
created_at: Utils.to_masto_date(notification.inserted_at)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue