defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.AcceptTest do use Mobilizon.DataCase import Mox alias Mobilizon.Federation.ActivityPub.Transmogrifier alias Mobilizon.Service.HTTP.ActivityPub.Mock describe "Receiving an Accept Join Event activity from a foreign instance" do @base_actor_data File.read!("test/fixtures/mastodon-actor.json") |> Jason.decode!() @actor_url "https://mobilizon.extinctionrebellion.fr/@anonymous" @actor_data @base_actor_data |> Map.put("id", @actor_url) |> Map.put("preferredUsername", "anonymous") @osmi_actor_url "https://mobilizon.extinctionrebellion.fr/@osmi" @osmi_actor_data @base_actor_data |> Map.put("id", @osmi_actor_url) |> Map.put("preferredUsername", "osmi") @xr_nantes_actor_url "https://mobilizon.extinctionrebellion.fr/@xr_nantes" @xr_nantes_actor_data @base_actor_data |> Map.put("id", @xr_nantes_actor_url) |> Map.put("preferredUsername", "xr_nantes") @event_url "https://mobilizon.extinctionrebellion.fr/events/d70f8e0d-62dc-4897-a855-ebcbe9798fc1" @event_data File.read!("test/fixtures/mobilizon-post-activity.json") |> Jason.decode!() |> Map.get("object") |> Map.put("id", @event_url) |> Map.put("actor", @osmi_actor_url) |> Map.put("attributedTo", @xr_nantes_actor_url) |> Map.put("tag", []) test "When the event is remote" do object = %{ "actor" => @actor_url, "id" => "https://mobilizon.extinctionrebellion.fr/join/event/b67cf172-af23-4ae8-b00e-a2e3643ccb21", "object" => "https://mobilizon.extinctionrebellion.fr/events/d70f8e0d-62dc-4897-a855-ebcbe9798fc1", "participationMessage" => nil, "published" => "2022-03-28T20:11:11Z", "type" => "Join" } activity = %{ "type" => "Accept", "object" => object, "actor" => @actor_url, "id" => "https://mobilizon.extinctionrebellion.fr/join/event/b67cf172-af23-4ae8-b00e-a2e3643ccb21/activity" } Mock |> expect(:call, 4, fn %{method: :get, url: @actor_url}, _opts -> {:ok, %Tesla.Env{status: 200, body: @actor_data}} %{method: :get, url: @osmi_actor_url}, _opts -> {:ok, %Tesla.Env{status: 200, body: @osmi_actor_data}} %{method: :get, url: @xr_nantes_actor_url}, _opts -> {:ok, %Tesla.Env{status: 200, body: @xr_nantes_actor_data}} %{method: :get, url: @event_url}, _opts -> {:ok, %Tesla.Env{status: 200, body: @event_data}} end) assert {:ok, _activity, _object} = Transmogrifier.handle_incoming(activity) end end end