Merge remote-tracking branch 'origin/develop' into global-status-expiration
[akkoma] / test / web / instances / instances_test.exs
index adb8560a7823a49c69663b53da78282d155da1d1..c5d6abc9c115a357e348f8efaa9978e47cf91f20 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.InstancesTest do
@@ -7,14 +7,8 @@ defmodule Pleroma.InstancesTest do
 
   use Pleroma.DataCase
 
-  setup_all do
-    config_path = [:instance, :federation_reachability_timeout_days]
-    initial_setting = Pleroma.Config.get(config_path)
-
-    Pleroma.Config.put(config_path, 1)
-    on_exit(fn -> Pleroma.Config.put(config_path, initial_setting) end)
-
-    :ok
+  clear_config_all([:instance, :federation_reachability_timeout_days]) do
+    Pleroma.Config.put([:instance, :federation_reachability_timeout_days], 1)
   end
 
   describe "reachable?/1" do
@@ -47,7 +41,7 @@ defmodule Pleroma.InstancesTest do
   end
 
   describe "filter_reachable/1" do
-    test "keeps only reachable elements of supplied list" do
+    setup do
       host = "consistently-unreachable.name"
       url1 = "http://eventually-unreachable.com/path"
       url2 = "http://domain.com/path"
@@ -55,7 +49,26 @@ defmodule Pleroma.InstancesTest do
       Instances.set_consistently_unreachable(host)
       Instances.set_unreachable(url1)
 
-      assert [url1, url2] == Instances.filter_reachable([host, url1, url2])
+      result = Instances.filter_reachable([host, url1, url2, nil])
+      %{result: result, url1: url1, url2: url2}
+    end
+
+    test "returns a map with keys containing 'not marked consistently unreachable' elements of supplied list",
+         %{result: result, url1: url1, url2: url2} do
+      assert is_map(result)
+      assert Enum.sort([url1, url2]) == result |> Map.keys() |> Enum.sort()
+    end
+
+    test "returns a map with `unreachable_since` values for keys",
+         %{result: result, url1: url1, url2: url2} do
+      assert is_map(result)
+      assert %NaiveDateTime{} = result[url1]
+      assert is_nil(result[url2])
+    end
+
+    test "returns an empty map for empty list or list containing no hosts / url" do
+      assert %{} == Instances.filter_reachable([])
+      assert %{} == Instances.filter_reachable([nil])
     end
   end
 
@@ -83,7 +96,8 @@ defmodule Pleroma.InstancesTest do
     end
   end
 
-  # Note: implementation-specific (e.g. Instance) details of set_unreachable/1 should be tested in implementation-specific tests
+  # Note: implementation-specific (e.g. Instance) details of set_unreachable/1
+  # should be tested in implementation-specific tests
   describe "set_unreachable/1" do
     test "returns error status on non-binary input" do
       assert {:error, _} = Instances.set_unreachable(nil)