commit: b9601ae11af022cdfbc624b1a50a0ccffb8e9a9d
parent 01ffaba3d2f9c5c94234e558f98f6795a6919b6c
Author: Phantasm <phantasm@centrum.cz>
Date: Tue, 23 Dec 2025 00:09:11 +0100
MastoAPI: Add Announce and EmojiReact attribution tests
Introduces a new EmojiReact Activity factory
Diffstat:
2 files changed, 88 insertions(+), 0 deletions(-)
diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs
@@ -815,6 +815,28 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
%{locals: [id1, id2], remote: remote_activity.id, context: context}
end
+ defp local_interactions_to_remote do
+ interacted_user = insert(:user, local: false, domain: "example.com")
+ interacting_user = insert(:user)
+
+ announced_post =
+ insert(:note_activity, local: false, object_local: false, user: interacted_user)
+
+ emoji_reacted_post =
+ insert(:note_activity, local: false, object_local: false, user: interacted_user)
+
+ announce = insert(:announce_activity, note_activity: announced_post, user: interacting_user)
+
+ emoji_react =
+ insert(:emoji_react_activity, note_activity: emoji_reacted_post, user: interacting_user)
+
+ {:ok,
+ announce: announce,
+ emoji_react: emoji_react,
+ interacted: interacted_user,
+ interacter: interacting_user}
+ end
+
describe "status with restrict unauthenticated activities for local and remote" do
setup do: local_and_remote_activities()
@@ -952,6 +974,50 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
end
end
+ # Rest of Activities like Create,Like,Flag,Add,Remove,... return 404.
+ describe "status has correct attribution when fetching as" do
+ setup do: local_interactions_to_remote()
+
+ test "Announce activity", %{
+ conn: conn,
+ announce: activity,
+ interacter: interacter,
+ interacted: user
+ } do
+ announce_id = activity.id
+ announced_activity = Pleroma.Activity.get_create_by_object_ap_id(activity.data["object"])
+ announced_id = announced_activity.id
+ interacter_ap_id = interacter.id
+ user_ap_id = user.id
+
+ result =
+ conn
+ |> get("/api/v1/statuses/#{activity.id}")
+ |> json_response_and_validate_schema(200)
+
+ assert match?(
+ %{
+ "id" => ^announce_id,
+ "account" => %{"id" => ^interacter_ap_id},
+ "reblog" => %{"account" => %{"id" => ^user_ap_id}, "id" => ^announced_id}
+ },
+ result
+ )
+ end
+
+ test "EmojiReact activity", %{conn: conn, emoji_react: activity, interacted: user} do
+ emoji_react_id = activity.id
+ user_ap_id = user.id
+
+ result =
+ conn
+ |> get("/api/v1/statuses/#{emoji_react_id}")
+ |> json_response_and_validate_schema(200)
+
+ assert match?(%{"id" => ^emoji_react_id, "account" => %{"id" => ^user_ap_id}}, result)
+ end
+ end
+
test "getting a status that doesn't exist returns 404" do
%{conn: conn} = oauth_access(["read:statuses"])
activity = insert(:note_activity)
diff --git a/test/support/factory.ex b/test/support/factory.ex
@@ -445,6 +445,28 @@ defmodule Pleroma.Factory do
}
end
+ def emoji_react_activity_factory(attrs \\ %{}) do
+ note_activity = attrs[:note_activity] || insert(:note_activity)
+ object = Object.normalize(note_activity, fetch: false)
+ user = attrs[:user] || insert(:user)
+
+ data = %{
+ "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
+ "actor" => user.ap_id,
+ "type" => "EmojiReact",
+ "object" => object.data["id"],
+ "to" => [user.follower_address, object.data["actor"]],
+ "cc" => ["https://www.w3.org/ns/activitystreams#Public"],
+ "published_at" => DateTime.utc_now() |> DateTime.to_iso8601(),
+ "context" => object.data["context"],
+ "content" => "😀"
+ }
+
+ %Pleroma.Activity{
+ data: data
+ }
+ end
+
def like_activity_factory(attrs \\ %{}) do
note_activity = attrs[:note_activity] || insert(:note_activity)
object = Object.normalize(note_activity, fetch: false)