commit: 73a3f06f7169b4de7d9237c7d258e3fd21aeaacf parent 293628fb241e765f33bcbf20b876f19537af7fd4 Author: Phantasm <phantasm@centrum.cz> Date: Thu, 11 Dec 2025 22:31:30 +0100 PleromaAPI: Change EmojiReact to invisible post response from 400 to 404Diffstat:
5 files changed, 36 insertions(+), 18 deletions(-)diff --git a/lib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex b/lib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex@@ -7,6 +7,7 @@ defmodule Pleroma.Web.ApiSpec.EmojiReactionOperation do alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.ApiError + alias Pleroma.Web.ApiSpec.Schemas.ApiNotFoundError alias Pleroma.Web.ApiSpec.Schemas.FlakeID alias Pleroma.Web.ApiSpec.Schemas.Status @@ -36,7 +37,7 @@ defmodule Pleroma.Web.ApiSpec.EmojiReactionOperation do operationId: "EmojiReactionController.index", responses: %{ 200 => array_of_reactions_response(), - 403 => Operation.response("Access denied", "application/json", ApiError) + 404 => Operation.response("Access denied", "application/json", ApiError) } } end @@ -55,7 +56,8 @@ defmodule Pleroma.Web.ApiSpec.EmojiReactionOperation do operationId: "EmojiReactionController.create", responses: %{ 200 => Operation.response("Status", "application/json", Status), - 400 => Operation.response("Bad Request", "application/json", ApiError) + 400 => Operation.response("Bad Request", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiNotFoundError) } } enddiff --git a/lib/pleroma/web/api_spec/schemas/api_not_found_error.ex b/lib/pleroma/web/api_spec/schemas/api_not_found_error.ex@@ -0,0 +1,19 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.ApiNotFoundError do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Not Found", + description: "Response schema for 404 API errors", + type: :object, + properties: %{error: %Schema{type: :string}}, + example: %{ + "error" => "Record not found" + } + }) +enddiff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex@@ -322,7 +322,7 @@ defmodule Pleroma.Web.CommonAPI do {:ok, activity} else {:visible, _} -> - {:error, dgettext("errors", "Must be able to access post to interact with it")} + {:error, :not_found} _ -> {:error, dgettext("errors", "Could not add reaction emoji")}diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex@@ -39,7 +39,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionController do render(conn, "index.json", emoji_reactions: reactions, user: user) else - {:visible, _} -> {:error, :forbidden} + {:visible, _} -> {:error, :not_found} _e -> json(conn, []) end enddiff --git a/test/pleroma/web/pleroma_api/controllers/emoji_reaction_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/emoji_reaction_controller_test.exs@@ -182,9 +182,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do resp = prepare_conn_of_user(conn, stranger) |> put("/api/v1/pleroma/statuses/#{activity_id}/reactions/🐈") - |> json_response_and_validate_schema(400) + |> json_response_and_validate_schema(404) - assert match?(%{"error" => _}, resp) + assert match?(%{"error" => "Record not found"}, resp) end test "DELETE /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do @@ -408,12 +408,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do assert match?([%{"name" => _, "count" => _} | _], resp) # Fails for stranger - resp = - prepare_conn_of_user(conn, stranger) - |> get("/api/v1/pleroma/statuses/#{activity_id}/reactions") - |> json_response_and_validate_schema(403) - - assert match?(%{"error" => _}, resp) + assert prepare_conn_of_user(conn, stranger) + |> get("/api/v1/pleroma/statuses/#{activity_id}/reactions") + |> json_response_and_validate_schema(404) == %{"error" => "Record not found"} end test "GET /api/v1/pleroma/statuses/:id/reactions with :show_reactions disabled", %{conn: conn} do @@ -471,13 +468,13 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do {%{id: activity_id} = _activity, _author, follower, stranger} = prepare_reacted_post() # Works for follower - prepare_conn_of_user(conn, follower) - |> get("/api/v1/pleroma/statuses/#{activity_id}/reactions/🐈") - |> json_response_and_validate_schema(200) + assert prepare_conn_of_user(conn, follower) + |> get("/api/v1/pleroma/statuses/#{activity_id}/reactions/🐈") + |> json_response_and_validate_schema(200) # Fails for stranger - prepare_conn_of_user(conn, stranger) - |> get("/api/v1/pleroma/statuses/#{activity_id}/reactions/🐈") - |> json_response_and_validate_schema(403) + assert prepare_conn_of_user(conn, stranger) + |> get("/api/v1/pleroma/statuses/#{activity_id}/reactions/🐈") + |> json_response_and_validate_schema(404) == %{"error" => "Record not found"} end end