diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index fbc548913..707609c2c 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -92,19 +92,16 @@ defmodule Pleroma.Web.ActivityPub.Publisher do uri = %{path: path} = URI.parse(inbox) {:ok, data} = Transmogrifier.prepare_outgoing(activity.data) - {actor, activity, data} = + + {actor, data} = with {_, false} <- {:actor_changed?, data["actor"] != activity.data["actor"]} do - {orig_actor, activity, data} + {actor, data} else {:actor_changed?, true} -> # If prepare_outgoing changes the actor, re-get it from the db - actor = User.get_cached_by_ap_id(data["actor"]) - - activity = %Activity{activity | actor: actor.ap_id} - - {actor, activity, data} - end - + new_actor = User.get_cached_by_ap_id(data["actor"]) + {new_actor, data} + end param_cc = Map.get(params, :cc, []) diff --git a/test/pleroma/web/activity_pub/publisher_test.exs b/test/pleroma/web/activity_pub/publisher_test.exs index 01311091a..2c9f5fa39 100644 --- a/test/pleroma/web/activity_pub/publisher_test.exs +++ b/test/pleroma/web/activity_pub/publisher_test.exs @@ -380,14 +380,18 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do end test_with_mock "Publishes with the new actor if prepare_outgoing changes the actor.", - Pleroma.Web.Federator.Publisher, + Pleroma.Web.ActivityPub.Publisher, [:passthrough], [] do + mock(fn + %{method: :post, url: "https://domain.com/users/nick1/inbox", body: body} -> + {:ok, %Tesla.Env{status: 200, body: body}} + end) + other_user = insert(:user, %{ local: false, - inbox: "https://domain.com/users/nick1/inbox", - ap_enabled: true + inbox: "https://domain.com/users/nick1/inbox" }) actor = insert(:user) @@ -401,25 +405,19 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do with_mock Pleroma.Web.ActivityPub.Transmogrifier, prepare_outgoing: fn data -> {:ok, Map.put(data, "actor", replaced_actor.ap_id)} end do - res = Publisher.publish(actor, note_activity) + prepared = + Publisher.prepare_one(%{ + inbox: "https://domain.com/users/nick1/inbox", + activity_id: note_activity.id, + cc: ["https://domain.com/users/nick2/inbox"] + }) - assert res == :ok + {:ok, decoded} = Jason.decode(prepared.json) + assert decoded["actor"] == replaced_actor.ap_id - refute called( - Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ - inbox: "https://domain.com/users/nick1/inbox", - actor_id: actor.id, - id: note_activity.data["id"] - }) - ) - - assert called( - Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ - inbox: "https://domain.com/users/nick1/inbox", - actor_id: replaced_actor.id, - id: note_activity.data["id"] - }) - ) + {:ok, published} = Publisher.publish_one(prepared) + sent_activity = Jason.decode!(published.body) + assert sent_activity["actor"] == replaced_actor.ap_id end end