Accept body parameters for /api/pleroma/notification_settings
This brings it in line with its documentation and akkoma-fe’s expectations. For backwards compatibility URL parameters are still accept with lower priority. Unfortunately this means duplicating parameters and descriptions in the API spec. Usually Plug already pre-merges parameters from different sources into the plain 'params' parameter which then gets forwarded by Phoenix. However, OpenApiSpex 3.x prevents this; 4.x is set to change this https://github.com/open-api-spex/open_api_spex/issues/334 https://github.com/open-api-spex/open_api_spex/issues/92 Fixes: #691 Fixes: #722
This commit is contained in:
parent
b8393ad9ed
commit
bd74ad9ce4
3 changed files with 99 additions and 3 deletions
|
@ -150,7 +150,7 @@ def update_notificaton_settings_operation do
|
|||
"removes the contents of a message from the push notification"
|
||||
)
|
||||
],
|
||||
requestBody: nil,
|
||||
requestBody: request_body("Parameters", update_notification_settings_request()),
|
||||
responses: %{
|
||||
200 =>
|
||||
Operation.response("Success", "application/json", %Schema{
|
||||
|
@ -432,4 +432,22 @@ defp delete_account_request do
|
|||
}
|
||||
}
|
||||
end
|
||||
|
||||
defp update_notification_settings_request do
|
||||
%Schema{
|
||||
title: "UpdateNotificationSettings",
|
||||
description: "PUT paramenters (query, form or JSON) for updating notification settings",
|
||||
type: :object,
|
||||
properties: %{
|
||||
block_from_strangers: %Schema{
|
||||
type: :boolean,
|
||||
description: "blocks notifications from accounts you do not follow"
|
||||
},
|
||||
hide_notification_contents: %Schema{
|
||||
type: :boolean,
|
||||
description: "removes the contents of a message from the push notification"
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -184,7 +184,13 @@ def emoji(conn, _params) do
|
|||
json(conn, emoji)
|
||||
end
|
||||
|
||||
def update_notificaton_settings(%{assigns: %{user: user}} = conn, params) do
|
||||
def update_notificaton_settings(
|
||||
%{assigns: %{user: user}, body_params: body_params} = conn,
|
||||
params
|
||||
) do
|
||||
# OpenApiSpex 3.x prevents Plug's usual parameter premerging
|
||||
params = Map.merge(params, body_params)
|
||||
|
||||
with {:ok, _} <- User.update_notification_settings(user, params) do
|
||||
json(conn, %{status: "success"})
|
||||
end
|
||||
|
|
|
@ -24,7 +24,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
|
|||
describe "PUT /api/pleroma/notification_settings" do
|
||||
setup do: oauth_access(["write:accounts"])
|
||||
|
||||
test "it updates notification settings", %{user: user, conn: conn} do
|
||||
test "it updates notification settings via url paramters", %{user: user, conn: conn} do
|
||||
conn
|
||||
|> put(
|
||||
"/api/pleroma/notification_settings?#{URI.encode_query(%{block_from_strangers: true})}"
|
||||
|
@ -39,6 +39,57 @@ test "it updates notification settings", %{user: user, conn: conn} do
|
|||
} == user.notification_settings
|
||||
end
|
||||
|
||||
test "it updates notification settings via JSON body params", %{user: user, conn: conn} do
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> put(
|
||||
"/api/pleroma/notification_settings",
|
||||
%{"block_from_strangers" => true}
|
||||
)
|
||||
|> json_response_and_validate_schema(:ok)
|
||||
|
||||
user = refresh_record(user)
|
||||
|
||||
assert %Pleroma.User.NotificationSetting{
|
||||
block_from_strangers: true,
|
||||
hide_notification_contents: false
|
||||
} == user.notification_settings
|
||||
end
|
||||
|
||||
test "it updates notification settings via form data", %{user: user, conn: conn} do
|
||||
conn
|
||||
|> put_req_header("content-type", "multipart/form-data")
|
||||
|> put(
|
||||
"/api/pleroma/notification_settings",
|
||||
%{:block_from_strangers => true}
|
||||
)
|
||||
|> json_response_and_validate_schema(:ok)
|
||||
|
||||
user = refresh_record(user)
|
||||
|
||||
assert %Pleroma.User.NotificationSetting{
|
||||
block_from_strangers: true,
|
||||
hide_notification_contents: false
|
||||
} == user.notification_settings
|
||||
end
|
||||
|
||||
test "it updates notification settings via urlencoded body", %{user: user, conn: conn} do
|
||||
conn
|
||||
|> put_req_header("content-type", "application/x-www-form-urlencoded")
|
||||
|> put(
|
||||
"/api/pleroma/notification_settings",
|
||||
"block_from_strangers=true"
|
||||
)
|
||||
|> json_response_and_validate_schema(:ok)
|
||||
|
||||
user = refresh_record(user)
|
||||
|
||||
assert %Pleroma.User.NotificationSetting{
|
||||
block_from_strangers: true,
|
||||
hide_notification_contents: false
|
||||
} == user.notification_settings
|
||||
end
|
||||
|
||||
test "it updates notification settings to enable hiding contents", %{user: user, conn: conn} do
|
||||
conn
|
||||
|> put(
|
||||
|
@ -53,6 +104,27 @@ test "it updates notification settings to enable hiding contents", %{user: user,
|
|||
hide_notification_contents: true
|
||||
} == user.notification_settings
|
||||
end
|
||||
|
||||
# we already test all body variants for block_from_strangers, so just one should suffice here
|
||||
test "it updates notification settings to enable hiding contents via JSON body params", %{
|
||||
user: user,
|
||||
conn: conn
|
||||
} do
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> put(
|
||||
"/api/pleroma/notification_settings",
|
||||
%{"hide_notification_contents" => true}
|
||||
)
|
||||
|> json_response_and_validate_schema(:ok)
|
||||
|
||||
user = refresh_record(user)
|
||||
|
||||
assert %Pleroma.User.NotificationSetting{
|
||||
block_from_strangers: false,
|
||||
hide_notification_contents: true
|
||||
} == user.notification_settings
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET /api/pleroma/frontend_configurations" do
|
||||
|
|
Loading…
Reference in a new issue