From df0880d8d12e557ca79161bc9a942bc8b3655d4e Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Sat, 28 Jun 2025 13:23:37 -0700 Subject: [PATCH] Add Instances.delete_all_unreachable/0 --- lib/pleroma/instances.ex | 8 ++++++++ test/pleroma/instances_test.exs | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/lib/pleroma/instances.ex b/lib/pleroma/instances.ex index a69554ada..79fbd538f 100644 --- a/lib/pleroma/instances.ex +++ b/lib/pleroma/instances.ex @@ -33,4 +33,12 @@ defmodule Pleroma.Instances do |> Oban.insert() end) end + + @doc "Deletes all users and activities for unreachable instances" + def delete_all_unreachable do + get_unreachable() + |> Enum.each(fn {domain, _} -> + Instance.delete_users_and_activities(domain) + end) + end end diff --git a/test/pleroma/instances_test.exs b/test/pleroma/instances_test.exs index 8e23fd096..c8618b748 100644 --- a/test/pleroma/instances_test.exs +++ b/test/pleroma/instances_test.exs @@ -109,4 +109,30 @@ defmodule Pleroma.InstancesTest do assert job.args["domain"] == unreachable_domain end end + + test "delete_all_unreachable/0 schedules DeleteWorker jobs for all unreachable instances" do + domain1 = "unreachable1.example.com" + domain2 = "unreachable2.example.com" + domain3 = "unreachable3.example.com" + + Instances.set_unreachable(domain1) + Instances.set_unreachable(domain2) + Instances.set_unreachable(domain3) + + Instances.delete_all_unreachable() + + # Verify that DeleteWorker jobs were scheduled for all unreachable domains + jobs = all_enqueued(worker: Pleroma.Workers.DeleteWorker) + assert length(jobs) == 3 + + domains = Enum.map(jobs, & &1.args["host"]) + assert domain1 in domains + assert domain2 in domains + assert domain3 in domains + + # Verify all jobs are delete_instance operations + Enum.each(jobs, fn job -> + assert job.args["op"] == "delete_instance" + end) + end end