Merge pull request 'fix flaky test filter_controller_test.exs:200' (#239) from ilja...
[akkoma] / test / pleroma / config / transfer_task_test.exs
index 7d51fd84ce50fa4a3f0f6cac0a4480d9b96ed753..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,7 +119,16 @@ 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
 
     test "don't restart if no reboot time settings were changed" do
     end
 
     test "don't restart if no reboot time settings were changed" do
@@ -87,32 +136,70 @@ defmodule Pleroma.Config.TransferTaskTest do
       insert(:config, key: :emoji, value: [groups: [a: 1, b: 2]])
 
       refute String.contains?(
       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
 
     test "on reboot time key" do
                "pleroma restarted"
              )
     end
 
     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
 
     test "on reboot time subkey" do
       clear_config(Pleroma.Captcha)
       insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
     end
 
     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
 
     test "don't restart pleroma on reboot time key and subkey if there is false flag" do
     end
 
     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