Merge branch 'notification_types' into 'develop'
MastoAPI: Use `types` for filtering notifications See merge request pleroma/pleroma!3648
This commit is contained in:
commit
8aba7c08d1
4 changed files with 33 additions and 10 deletions
|
@ -51,6 +51,12 @@ defmodule Pleroma.Web.ApiSpec.NotificationOperation do
|
||||||
:include_types,
|
:include_types,
|
||||||
:query,
|
:query,
|
||||||
%Schema{type: :array, items: notification_type()},
|
%Schema{type: :array, items: notification_type()},
|
||||||
|
"Deprecated, use `types` instead"
|
||||||
|
),
|
||||||
|
Operation.parameter(
|
||||||
|
:types,
|
||||||
|
:query,
|
||||||
|
%Schema{type: :array, items: notification_type()},
|
||||||
"Include the notifications for activities with the given types"
|
"Include the notifications for activities with the given types"
|
||||||
),
|
),
|
||||||
Operation.parameter(
|
Operation.parameter(
|
||||||
|
|
|
@ -55,7 +55,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do
|
||||||
def index(%{assigns: %{user: user}} = conn, params) do
|
def index(%{assigns: %{user: user}} = conn, params) do
|
||||||
params =
|
params =
|
||||||
Map.new(params, fn {k, v} -> {to_string(k), v} end)
|
Map.new(params, fn {k, v} -> {to_string(k), v} end)
|
||||||
|> Map.put_new("include_types", @default_notification_types)
|
|> Map.put_new("types", Map.get(params, :include_types, @default_notification_types))
|
||||||
|
|
||||||
notifications = MastodonAPI.get_notifications(user, params)
|
notifications = MastodonAPI.get_notifications(user, params)
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
|
||||||
|
|
||||||
user
|
user
|
||||||
|> Notification.for_user_query(options)
|
|> Notification.for_user_query(options)
|
||||||
|> restrict(:include_types, options)
|
|> restrict(:types, options)
|
||||||
|> restrict(:exclude_types, options)
|
|> restrict(:exclude_types, options)
|
||||||
|> restrict(:account_ap_id, options)
|
|> restrict(:account_ap_id, options)
|
||||||
|> Pagination.fetch_paginated(params)
|
|> Pagination.fetch_paginated(params)
|
||||||
|
@ -80,7 +80,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
|
||||||
defp cast_params(params) do
|
defp cast_params(params) do
|
||||||
param_types = %{
|
param_types = %{
|
||||||
exclude_types: {:array, :string},
|
exclude_types: {:array, :string},
|
||||||
include_types: {:array, :string},
|
types: {:array, :string},
|
||||||
exclude_visibilities: {:array, :string},
|
exclude_visibilities: {:array, :string},
|
||||||
reblogs: :boolean,
|
reblogs: :boolean,
|
||||||
with_muted: :boolean,
|
with_muted: :boolean,
|
||||||
|
@ -92,7 +92,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
|
||||||
changeset.changes
|
changeset.changes
|
||||||
end
|
end
|
||||||
|
|
||||||
defp restrict(query, :include_types, %{include_types: mastodon_types = [_ | _]}) do
|
defp restrict(query, :types, %{types: mastodon_types = [_ | _]}) do
|
||||||
where(query, [n], n.type in ^mastodon_types)
|
where(query, [n], n.type in ^mastodon_types)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -423,7 +423,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
|
||||||
assert [%{"id" => ^reblog_notification_id}] = json_response_and_validate_schema(conn_res, 200)
|
assert [%{"id" => ^reblog_notification_id}] = json_response_and_validate_schema(conn_res, 200)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "filters notifications using include_types" do
|
test "filters notifications using types" do
|
||||||
%{user: user, conn: conn} = oauth_access(["read:notifications"])
|
%{user: user, conn: conn} = oauth_access(["read:notifications"])
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
@ -438,21 +438,21 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
|
||||||
reblog_notification_id = get_notification_id_by_activity(reblog_activity)
|
reblog_notification_id = get_notification_id_by_activity(reblog_activity)
|
||||||
follow_notification_id = get_notification_id_by_activity(follow_activity)
|
follow_notification_id = get_notification_id_by_activity(follow_activity)
|
||||||
|
|
||||||
conn_res = get(conn, "/api/v1/notifications?include_types[]=follow")
|
conn_res = get(conn, "/api/v1/notifications?types[]=follow")
|
||||||
|
|
||||||
assert [%{"id" => ^follow_notification_id}] = json_response_and_validate_schema(conn_res, 200)
|
assert [%{"id" => ^follow_notification_id}] = json_response_and_validate_schema(conn_res, 200)
|
||||||
|
|
||||||
conn_res = get(conn, "/api/v1/notifications?include_types[]=mention")
|
conn_res = get(conn, "/api/v1/notifications?types[]=mention")
|
||||||
|
|
||||||
assert [%{"id" => ^mention_notification_id}] =
|
assert [%{"id" => ^mention_notification_id}] =
|
||||||
json_response_and_validate_schema(conn_res, 200)
|
json_response_and_validate_schema(conn_res, 200)
|
||||||
|
|
||||||
conn_res = get(conn, "/api/v1/notifications?include_types[]=favourite")
|
conn_res = get(conn, "/api/v1/notifications?types[]=favourite")
|
||||||
|
|
||||||
assert [%{"id" => ^favorite_notification_id}] =
|
assert [%{"id" => ^favorite_notification_id}] =
|
||||||
json_response_and_validate_schema(conn_res, 200)
|
json_response_and_validate_schema(conn_res, 200)
|
||||||
|
|
||||||
conn_res = get(conn, "/api/v1/notifications?include_types[]=reblog")
|
conn_res = get(conn, "/api/v1/notifications?types[]=reblog")
|
||||||
|
|
||||||
assert [%{"id" => ^reblog_notification_id}] = json_response_and_validate_schema(conn_res, 200)
|
assert [%{"id" => ^reblog_notification_id}] = json_response_and_validate_schema(conn_res, 200)
|
||||||
|
|
||||||
|
@ -460,7 +460,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
|
||||||
|
|
||||||
assert length(result) == 4
|
assert length(result) == 4
|
||||||
|
|
||||||
query = params_to_query(%{include_types: ["follow", "mention", "favourite", "reblog"]})
|
query = params_to_query(%{types: ["follow", "mention", "favourite", "reblog"]})
|
||||||
|
|
||||||
result =
|
result =
|
||||||
conn
|
conn
|
||||||
|
@ -470,6 +470,23 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
|
||||||
assert length(result) == 4
|
assert length(result) == 4
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "filtering falls back to include_types" do
|
||||||
|
%{user: user, conn: conn} = oauth_access(["read:notifications"])
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, _activity} = CommonAPI.post(other_user, %{status: "hey @#{user.nickname}"})
|
||||||
|
{:ok, create_activity} = CommonAPI.post(user, %{status: "hey"})
|
||||||
|
{:ok, _activity} = CommonAPI.favorite(other_user, create_activity.id)
|
||||||
|
{:ok, _activity} = CommonAPI.repeat(create_activity.id, other_user)
|
||||||
|
{:ok, _, _, follow_activity} = CommonAPI.follow(other_user, user)
|
||||||
|
|
||||||
|
follow_notification_id = get_notification_id_by_activity(follow_activity)
|
||||||
|
|
||||||
|
conn_res = get(conn, "/api/v1/notifications?include_types[]=follow")
|
||||||
|
|
||||||
|
assert [%{"id" => ^follow_notification_id}] = json_response_and_validate_schema(conn_res, 200)
|
||||||
|
end
|
||||||
|
|
||||||
test "destroy multiple" do
|
test "destroy multiple" do
|
||||||
%{user: user, conn: conn} = oauth_access(["read:notifications", "write:notifications"])
|
%{user: user, conn: conn} = oauth_access(["read:notifications", "write:notifications"])
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
|
Loading…
Reference in a new issue