aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgor Kislitsyn <egor@kislitsyn.com>2019-12-03 22:13:38 +0700
committerEgor Kislitsyn <egor@kislitsyn.com>2019-12-03 22:13:38 +0700
commit624e720aa45fd54575d17a2b5e77c67deef6eb86 (patch)
tree68783e20f8bc9cc16837a194de4f15d526a60d61
parent7722e5a67a46304f3ae0e37f674a44ca9268be5e (diff)
downloadpleroma-624e720aa45fd54575d17a2b5e77c67deef6eb86.tar.gz
Add `with_move` query param to the notifications API
-rw-r--r--lib/pleroma/notification.ex9
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api.ex3
-rw-r--r--test/notification_test.exs8
-rw-r--r--test/web/activity_pub/activity_pub_test.exs4
-rw-r--r--test/web/mastodon_api/controllers/notification_controller_test.exs26
-rw-r--r--test/web/mastodon_api/views/notification_view_test.exs8
6 files changed, 49 insertions, 9 deletions
diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex
index f37e7ec67..6b6e1c2e1 100644
--- a/lib/pleroma/notification.ex
+++ b/lib/pleroma/notification.ex
@@ -57,6 +57,7 @@ defmodule Pleroma.Notification do
|> exclude_muted(user, opts)
|> exclude_blocked(user)
|> exclude_visibility(opts)
+ |> exclude_move(opts)
end
defp exclude_blocked(query, user) do
@@ -81,6 +82,14 @@ defmodule Pleroma.Notification do
|> where([n, a, o, tm], is_nil(tm.user_id))
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]
defp exclude_visibility(query, %{exclude_visibilities: visibility})
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api.ex b/lib/pleroma/web/mastodon_api/mastodon_api.ex
index d875a5788..3e7dc4617 100644
--- a/lib/pleroma/web/mastodon_api/mastodon_api.ex
+++ b/lib/pleroma/web/mastodon_api/mastodon_api.ex
@@ -73,7 +73,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
exclude_types: {:array, :string},
exclude_visibilities: {:array, :string},
reblogs: :boolean,
- with_muted: :boolean
+ with_muted: :boolean,
+ with_move: :boolean
}
changeset = cast({%{}, param_types}, params, Map.keys(param_types))
diff --git a/test/notification_test.exs b/test/notification_test.exs
index dcbffeafe..9fe34d18f 100644
--- a/test/notification_test.exs
+++ b/test/notification_test.exs
@@ -643,13 +643,17 @@ defmodule Pleroma.NotificationTest do
Pleroma.Web.ActivityPub.ActivityPub.move(old_user, new_user)
ObanHelpers.perform_all()
+ assert [] = Notification.for_user(follower)
+
assert [
%{
activity: %{
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
}
}
- ] = Notification.for_user(follower)
+ ] = Notification.for_user(follower, %{with_move: true})
+
+ assert [] = Notification.for_user(other_follower)
assert [
%{
@@ -657,7 +661,7 @@ defmodule Pleroma.NotificationTest do
data: %{"type" => "Move", "actor" => ^old_ap_id, "target" => ^new_ap_id}
}
}
- ] = Notification.for_user(other_follower)
+ ] = Notification.for_user(other_follower, %{with_move: true})
end
end
diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs
index 2677b9e36..93eabde85 100644
--- a/test/web/activity_pub/activity_pub_test.exs
+++ b/test/web/activity_pub/activity_pub_test.exs
@@ -1619,10 +1619,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
activity = %Activity{activity | object: nil}
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}] =
- 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
test "old user must be in the new user's `also_known_as` list" do
diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs
index fa55a7cf9..349cca682 100644
--- a/test/web/mastodon_api/controllers/notification_controller_test.exs
+++ b/test/web/mastodon_api/controllers/notification_controller_test.exs
@@ -341,6 +341,32 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
assert length(json_response(conn, 200)) == 1
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
Notification
|> Repo.get_by(activity_id: id)
diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs
index 80b6d414c..cd36cb538 100644
--- a/test/web/mastodon_api/views/notification_view_test.exs
+++ b/test/web/mastodon_api/views/notification_view_test.exs
@@ -109,22 +109,22 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do
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])
+ 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()
- [notification] = Notification.for_user(follower)
+ [notification] = Notification.for_user(follower, %{with_move: true})
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}),
+ target: AccountView.render("show.json", %{user: refresh_record(new_user), for: follower}),
created_at: Utils.to_masto_date(notification.inserted_at)
}