Merge pull request 'fix flaky test filter_controller_test.exs:200' (#239) from ilja...
[akkoma] / test / pleroma / config / transfer_task_test.exs
index 9e3f11f1a8741e4e09fc919c0f54d8dabbed0bf6..988214eb158ddced9f7a7bbd62208c74706dbfbd 100644 (file)
@@ -10,13 +10,16 @@ defmodule Pleroma.Config.TransferTaskTest do
 
   alias Pleroma.Config.TransferTask
 
 
   alias Pleroma.Config.TransferTask
 
-  setup do: clear_config(:configurable_from_database, true)
+  setup do
+    clear_config(:configurable_from_database, true)
+  end
 
   test "transfer config values from db to env" do
     refute Application.get_env(:pleroma, :test_key)
     refute Application.get_env(:idna, :test_key)
     refute Application.get_env(:quack, :test_key)
     refute Application.get_env(:postgrex, :test_key)
 
   test "transfer config values from db to env" do
     refute Application.get_env(:pleroma, :test_key)
     refute Application.get_env(:idna, :test_key)
     refute Application.get_env(:quack, :test_key)
     refute Application.get_env(:postgrex, :test_key)
+
     initial = Application.get_env(:logger, :level)
 
     insert(:config, key: :test_key, value: [live: 2, com: 3])
     initial = Application.get_env(:logger, :level)
 
     insert(:config, key: :test_key, value: [live: 2, com: 3])
@@ -24,7 +27,7 @@ defmodule Pleroma.Config.TransferTaskTest do
     insert(:config, group: :quack, key: :test_key, value: [:test_value1, :test_value2])
     insert(:config, group: :postgrex, key: :test_key, value: :value)
     insert(:config, group: :logger, key: :level, value: :debug)
     insert(:config, group: :quack, key: :test_key, value: [:test_value1, :test_value2])
     insert(:config, group: :postgrex, key: :test_key, value: :value)
     insert(:config, group: :logger, key: :level, value: :debug)
-
+    insert(:config, group: :pleroma, key: :instance, value: [static_dir: "static_dir_from_db"])
     TransferTask.start_link([])
 
     assert Application.get_env(:pleroma, :test_key) == [live: 2, com: 3]
     TransferTask.start_link([])
 
     assert Application.get_env(:pleroma, :test_key) == [live: 2, com: 3]
@@ -32,6 +35,7 @@ defmodule Pleroma.Config.TransferTaskTest do
     assert Application.get_env(:quack, :test_key) == [:test_value1, :test_value2]
     assert Application.get_env(:logger, :level) == :debug
     assert Application.get_env(:postgrex, :test_key) == :value
     assert Application.get_env(:quack, :test_key) == [:test_value1, :test_value2]
     assert Application.get_env(:logger, :level) == :debug
     assert Application.get_env(:postgrex, :test_key) == :value
+    assert Application.get_env(:pleroma, :instance)[:static_dir] == "static_dir_from_db"
 
     on_exit(fn ->
       Application.delete_env(:pleroma, :test_key)
 
     on_exit(fn ->
       Application.delete_env(:pleroma, :test_key)
@@ -39,6 +43,42 @@ defmodule Pleroma.Config.TransferTaskTest do
       Application.delete_env(:quack, :test_key)
       Application.delete_env(:postgrex, :test_key)
       Application.put_env(:logger, :level, initial)
       Application.delete_env(:quack, :test_key)
       Application.delete_env(:postgrex, :test_key)
       Application.put_env(:logger, :level, initial)
+      System.delete_env("RELEASE_NAME")
+    end)
+  end
+
+  test "transfer task falls back to env before default" do
+    instance = Application.get_env(:pleroma, :instance)
+
+    insert(:config, key: :instance, value: [name: "wow"])
+    clear_config([:instance, :static_dir], "static_dir_from_env")
+    TransferTask.start_link([])
+
+    assert Application.get_env(:pleroma, :instance)[:name] == "wow"
+    assert Application.get_env(:pleroma, :instance)[:static_dir] == "static_dir_from_env"
+
+    on_exit(fn ->
+      Application.put_env(:pleroma, :instance, instance)
+    end)
+  end
+
+  test "transfer task falls back to release defaults if no other values found" do
+    instance = Application.get_env(:pleroma, :instance)
+
+    System.put_env("RELEASE_NAME", "akkoma")
+    Pleroma.Config.Holder.save_default()
+    insert(:config, key: :instance, value: [name: "wow"])
+    Application.delete_env(:pleroma, :instance)
+
+    TransferTask.start_link([])
+
+    assert Application.get_env(:pleroma, :instance)[:name] == "wow"
+    assert Application.get_env(:pleroma, :instance)[:static_dir] == "/var/lib/akkoma/static"
+
+    on_exit(fn ->
+      System.delete_env("RELEASE_NAME")
+      Pleroma.Config.Holder.save_default()
+      Application.put_env(:pleroma, :instance, instance)
     end)
   end
 
     end)
   end
 
@@ -79,44 +119,87 @@ defmodule Pleroma.Config.TransferTaskTest do
 
   describe "pleroma restart" do
     setup do
 
   describe "pleroma restart" do
     setup do
-      on_exit(fn -> Restarter.Pleroma.refresh() end)
+      on_exit(fn ->
+        Restarter.Pleroma.refresh()
+
+        # Restarter.Pleroma.refresh/0 is an asynchronous call.
+        # A GenServer will first finish the previous call before starting a new one.
+        # Here we do a synchronous call.
+        # That way we are sure that the previous call has finished before we continue.
+        # See https://stackoverflow.com/questions/51361856/how-to-use-task-await-with-genserver
+        Restarter.Pleroma.rebooted?()
+      end)
     end
 
     end
 
-    @tag :erratic
     test "don't restart if no reboot time settings were changed" do
       clear_config(:emoji)
       insert(:config, key: :emoji, value: [groups: [a: 1, b: 2]])
 
       refute String.contains?(
     test "don't restart if no reboot time settings were changed" do
       clear_config(:emoji)
       insert(:config, key: :emoji, value: [groups: [a: 1, b: 2]])
 
       refute String.contains?(
-               capture_log(fn -> TransferTask.start_link([]) end),
+               capture_log(fn ->
+                 TransferTask.start_link([])
+
+                 # TransferTask.start_link/1 is an asynchronous call.
+                 # A GenServer will first finish the previous call before starting a new one.
+                 # Here we do a synchronous call.
+                 # That way we are sure that the previous call has finished before we continue.
+                 Restarter.Pleroma.rebooted?()
+               end),
                "pleroma restarted"
              )
     end
 
                "pleroma restarted"
              )
     end
 
-    @tag :erratic
     test "on reboot time key" do
     test "on reboot time key" do
-      clear_config(:shout)
-      insert(:config, key: :shout, value: [enabled: false])
-      assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"
+      clear_config(:rate_limit)
+      insert(:config, key: :rate_limit, value: [enabled: false])
+
+      # Note that we don't actually restart Pleroma.
+      # See module Restarter.Pleroma
+      assert capture_log(fn ->
+               TransferTask.start_link([])
+
+               # TransferTask.start_link/1 is an asynchronous call.
+               # A GenServer will first finish the previous call before starting a new one.
+               # Here we do a synchronous call.
+               # That way we are sure that the previous call has finished before we continue.
+               Restarter.Pleroma.rebooted?()
+             end) =~ "pleroma restarted"
     end
 
     end
 
-    @tag :erratic
     test "on reboot time subkey" do
       clear_config(Pleroma.Captcha)
       insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
     test "on reboot time subkey" do
       clear_config(Pleroma.Captcha)
       insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
-      assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"
+
+      # Note that we don't actually restart Pleroma.
+      # See module Restarter.Pleroma
+      assert capture_log(fn ->
+               TransferTask.start_link([])
+
+               # TransferTask.start_link/1 is an asynchronous call.
+               # A GenServer will first finish the previous call before starting a new one.
+               # Here we do a synchronous call.
+               # That way we are sure that the previous call has finished before we continue.
+               Restarter.Pleroma.rebooted?()
+             end) =~ "pleroma restarted"
     end
 
     end
 
-    @tag :erratic
     test "don't restart pleroma on reboot time key and subkey if there is false flag" do
     test "don't restart pleroma on reboot time key and subkey if there is false flag" do
-      clear_config(:shout)
+      clear_config(:rate_limit)
       clear_config(Pleroma.Captcha)
 
       clear_config(Pleroma.Captcha)
 
-      insert(:config, key: :shout, value: [enabled: false])
+      insert(:config, key: :rate_limit, value: [enabled: false])
       insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
 
       refute String.contains?(
       insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
 
       refute String.contains?(
-               capture_log(fn -> TransferTask.load_and_update_env([], false) end),
+               capture_log(fn ->
+                 TransferTask.load_and_update_env([], false)
+
+                 # TransferTask.start_link/1 is an asynchronous call.
+                 # A GenServer will first finish the previous call before starting a new one.
+                 # Here we do a synchronous call.
+                 # That way we are sure that the previous call has finished before we continue.
+                 Restarter.Pleroma.rebooted?()
+               end),
                "pleroma restarted"
              )
     end
                "pleroma restarted"
              )
     end