diff --git a/lib/service/workers/refresh_instances.ex b/lib/service/workers/refresh_instances.ex index c1db70484..efc67a15a 100644 --- a/lib/service/workers/refresh_instances.ex +++ b/lib/service/workers/refresh_instances.ex @@ -5,7 +5,9 @@ defmodule Mobilizon.Service.Workers.RefreshInstances do use Oban.Worker, unique: [period: :infinity, keys: [:event_uuid, :action]] + alias Mobilizon.Actors.Actor alias Mobilizon.Federation.ActivityPub.Actor, as: ActivityPubActor + alias Mobilizon.Federation.ActivityPub.Relay alias Mobilizon.Instances alias Mobilizon.Instances.Instance alias Oban.Job @@ -22,13 +24,20 @@ defmodule Mobilizon.Service.Workers.RefreshInstances do @spec refresh_instance_actor(Instance.t()) :: {:ok, Mobilizon.Actors.Actor.t()} | {:error, - Mobilizon.Federation.ActivityPub.Actor.make_actor_errors() + ActivityPubActor.make_actor_errors() | Mobilizon.Federation.WebFinger.finger_errors()} - defp refresh_instance_actor(%Instance{domain: nil}) do + def refresh_instance_actor(%Instance{domain: nil}) do {:error, :not_remote_instance} end - defp refresh_instance_actor(%Instance{domain: domain}) do - ActivityPubActor.find_or_make_actor_from_nickname("relay@#{domain}") + def refresh_instance_actor(%Instance{domain: domain}) do + %Actor{url: url} = Relay.get_actor() + %URI{host: host} = URI.new!(url) + + if host == domain do + {:error, :not_remote_instance} + else + ActivityPubActor.find_or_make_actor_from_nickname("relay@#{domain}") + end end end diff --git a/test/service/workers/refresh_instances_test.exs b/test/service/workers/refresh_instances_test.exs new file mode 100644 index 000000000..0a5181238 --- /dev/null +++ b/test/service/workers/refresh_instances_test.exs @@ -0,0 +1,28 @@ +defmodule Mobilizon.Service.Workers.RefreshInstancesTest do + @moduledoc """ + Test the refresh instance module + """ + + alias Mobilizon.Actors.Actor + alias Mobilizon.Federation.ActivityPub.Relay + alias Mobilizon.Instances.Instance + alias Mobilizon.Service.Workers.RefreshInstances + + use Mobilizon.DataCase + + describe "Refresh instance actor" do + test "unless if local actor" do + # relay = Mobilizon.Web.Relay.get_actor() + assert {:error, :not_remote_instance} == + RefreshInstances.refresh_instance_actor(%Instance{domain: nil}) + end + + test "unless if local relay actor" do + %Actor{url: url} = Relay.get_actor() + %URI{host: domain} = URI.new!(url) + + assert {:error, :not_remote_instance} == + RefreshInstances.refresh_instance_actor(%Instance{domain: domain}) + end + end +end