logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://anongit.hacktivis.me/git/pleroma.git/
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:

Mtest/pleroma/web/mastodon_api/controllers/status_controller_test.exs66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/support/factory.ex22++++++++++++++++++++++
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)