removes duplicates from relay subscription list
authorMaksim Pechnikov <parallel588@gmail.com>
Mon, 19 Aug 2019 10:31:56 +0000 (13:31 +0300)
committerMaksim Pechnikov <parallel588@gmail.com>
Mon, 19 Aug 2019 10:39:18 +0000 (13:39 +0300)
lib/mix/tasks/pleroma/relay.ex
test/tasks/relay_test.exs

index c7324fff6f9bacea358dc0b6addac3989202f7ba..a738fae75a1b2876c4975711bd5c82dd689d96c5 100644 (file)
@@ -53,13 +53,11 @@ defmodule Mix.Tasks.Pleroma.Relay do
   def run(["list"]) do
     start_pleroma()
 
-    with %User{} = user <- Relay.get_actor() do
-      user.following
-      |> Enum.each(fn entry ->
-        URI.parse(entry)
-        |> Map.get(:host)
-        |> shell_info()
-      end)
+    with %User{following: following} = _user <- Relay.get_actor() do
+      following
+      |> Enum.map(fn entry -> URI.parse(entry).host end)
+      |> Enum.uniq()
+      |> Enum.each(&shell_info(&1))
     else
       e -> shell_error("Error while fetching relay subscription list: #{inspect(e)}")
     end
index 9d260da3e21a1b6e9af46fcf7f678b1432e40a1c..0d341c8d6c35bc4c552599a2530d5dbad573fc68 100644 (file)
@@ -69,4 +69,27 @@ defmodule Mix.Tasks.Pleroma.RelayTest do
       assert undo_activity.data["object"] == cancelled_activity.data
     end
   end
+
+  describe "mix pleroma.relay list" do
+    test "Prints relay subscription list" do
+      :ok = Mix.Tasks.Pleroma.Relay.run(["list"])
+
+      refute_receive {:mix_shell, :info, _}
+
+      Pleroma.Web.ActivityPub.Relay.get_actor()
+      |> Ecto.Changeset.change(
+        following: [
+          "http://test-app.com/user/test1",
+          "http://test-app.com/user/test1",
+          "http://test-app-42.com/user/test1"
+        ]
+      )
+      |> Pleroma.User.update_and_set_cache()
+
+      :ok = Mix.Tasks.Pleroma.Relay.run(["list"])
+
+      assert_receive {:mix_shell, :info, ["test-app.com"]}
+      assert_receive {:mix_shell, :info, ["test-app-42.com"]}
+    end
+  end
 end