From 7f9bcbcb1334bec115fae447320c8277aed8bd57 Mon Sep 17 00:00:00 2001 From: Laurent GAY Date: Mon, 30 Jun 2025 16:36:50 +0200 Subject: [PATCH] Correct elixir tests back-end link to actor refresh for new federation - issue #1776 --- .../transmogrifier/follow_test.exs | 140 ++++++++++++++++++ .../activity_pub/transmogrifier/undo_test.exs | 48 ++++++ 2 files changed, 188 insertions(+) diff --git a/test/federation/activity_pub/transmogrifier/follow_test.exs b/test/federation/activity_pub/transmogrifier/follow_test.exs index b07b8d467..4ebd0b1d7 100644 --- a/test/federation/activity_pub/transmogrifier/follow_test.exs +++ b/test/federation/activity_pub/transmogrifier/follow_test.exs @@ -7,6 +7,8 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.FollowTest do alias Mobilizon.Actors.Follower alias Mobilizon.Federation.ActivityPub.{Actions, Activity, Relay, Transmogrifier} alias Mobilizon.Service.HTTP.ActivityPub.Mock + alias Mobilizon.Service.HTTP.HostMetaClient.Mock, as: HostMetaClientMock + alias Mobilizon.Service.HTTP.WebfingerClient.Mock, as: WebfingerClientMock alias Mobilizon.Users.User import Swoosh.TestAssertions @@ -45,6 +47,52 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.FollowTest do test "it works for incoming follow requests" do actor = insert(:group) + HostMetaClientMock + |> expect(:call, 3, fn + %{method: :get, url: "https://social.tcit.fr/.well-known/host-meta"}, _opts -> + {:ok, %Tesla.Env{status: 404, body: ""}} + end) + + webfinger_data = + "{}" + |> Jason.decode!() + + WebfingerClientMock + |> expect(:call, 4, fn + %{method: :get, url: "https://social.tcit.fr/.well-known/nodeinfo"}, _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + + %{ + method: :get, + url: "https://social.tcit.fr/.well-known/webfinger?resource=acct:relay@social.tcit.fr" + }, + _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + + %{ + method: :get, + url: + "https://social.tcit.fr/.well-known/webfinger?resource=acct:social.tcit.fr@social.tcit.fr" + }, + _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + end) + actor_data = File.read!("test/fixtures/mastodon-actor.json") |> Jason.decode!() @@ -110,6 +158,52 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.FollowTest do %User{} = insert(:user, email: "loulou@example.com", role: :administrator) relay = Relay.get_actor() + HostMetaClientMock + |> expect(:call, 3, fn + %{method: :get, url: "https://social.tcit.fr/.well-known/host-meta"}, _opts -> + {:ok, %Tesla.Env{status: 404, body: ""}} + end) + + webfinger_data = + "{}" + |> Jason.decode!() + + WebfingerClientMock + |> expect(:call, 4, fn + %{method: :get, url: "https://social.tcit.fr/.well-known/nodeinfo"}, _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + + %{ + method: :get, + url: "https://social.tcit.fr/.well-known/webfinger?resource=acct:relay@social.tcit.fr" + }, + _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + + %{ + method: :get, + url: + "https://social.tcit.fr/.well-known/webfinger?resource=acct:social.tcit.fr@social.tcit.fr" + }, + _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + end) + actor_data = File.read!("test/fixtures/mastodon-actor.json") |> Jason.decode!() @@ -146,6 +240,52 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.FollowTest do %User{email: admin_email} = insert(:user, email: "loulou@example.com", role: :administrator) relay = Relay.get_actor() + HostMetaClientMock + |> expect(:call, 3, fn + %{method: :get, url: "https://mobilizon.fr/.well-known/host-meta"}, _opts -> + {:ok, %Tesla.Env{status: 404, body: ""}} + end) + + webfinger_data = + "{}" + |> Jason.decode!() + + WebfingerClientMock + |> expect(:call, 4, fn + %{method: :get, url: "https://mobilizon.fr/.well-known/nodeinfo"}, _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + + %{ + method: :get, + url: "https://mobilizon.fr/.well-known/webfinger?resource=acct:relay@mobilizon.fr" + }, + _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + + %{ + method: :get, + url: + "https://mobilizon.fr/.well-known/webfinger?resource=acct:mobilizon.fr@mobilizon.fr" + }, + _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + end) + actor_data = File.read!("test/fixtures/mastodon-actor.json") |> Jason.decode!() diff --git a/test/federation/activity_pub/transmogrifier/undo_test.exs b/test/federation/activity_pub/transmogrifier/undo_test.exs index 6713fdbdc..02b859891 100644 --- a/test/federation/activity_pub/transmogrifier/undo_test.exs +++ b/test/federation/activity_pub/transmogrifier/undo_test.exs @@ -7,6 +7,8 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.UndoTest do alias Mobilizon.Discussions.Comment alias Mobilizon.Federation.ActivityPub.{Activity, Transmogrifier} alias Mobilizon.Service.HTTP.ActivityPub.Mock + alias Mobilizon.Service.HTTP.HostMetaClient.Mock, as: HostMetaClientMock + alias Mobilizon.Service.HTTP.WebfingerClient.Mock, as: WebfingerClientMock describe "handle incoming undo activities" do test "it works for incoming unannounces with an existing notice" do @@ -51,6 +53,52 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.UndoTest do test "it works for incomming unfollows with an existing follow" do actor = insert(:group) + HostMetaClientMock + |> expect(:call, 3, fn + %{method: :get, url: "https://social.tcit.fr/.well-known/host-meta"}, _opts -> + {:ok, %Tesla.Env{status: 404, body: ""}} + end) + + webfinger_data = + "{}" + |> Jason.decode!() + + WebfingerClientMock + |> expect(:call, 4, fn + %{method: :get, url: "https://social.tcit.fr/.well-known/nodeinfo"}, _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + + %{ + method: :get, + url: "https://social.tcit.fr/.well-known/webfinger?resource=acct:relay@social.tcit.fr" + }, + _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + + %{ + method: :get, + url: + "https://social.tcit.fr/.well-known/webfinger?resource=acct:social.tcit.fr@social.tcit.fr" + }, + _opts -> + {:ok, + %Tesla.Env{ + status: 200, + body: webfinger_data, + headers: [{"content-type", "application/json"}] + }} + end) + follow_data = File.read!("test/fixtures/mastodon-follow-activity.json") |> Jason.decode!()