tests for setttings without an explicit key
authorAlexander <alex.strizhakov@gmail.com>
Fri, 6 Dec 2019 05:21:30 +0000 (08:21 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Fri, 10 Jan 2020 12:51:59 +0000 (15:51 +0300)
lib/mix/tasks/pleroma/config.ex
test/config/transfer_task_test.exs
test/tasks/config_test.exs
test/web/admin_api/admin_api_controller_test.exs

index bb126463c790b0a88967c222daa07bcd70a2c0b6..cef02b864bb31d0a4a07fdc8900b4cd6e880c799 100644 (file)
@@ -76,10 +76,10 @@ defmodule Mix.Tasks.Pleroma.Config do
     |> Application.get_all_env()
     |> Enum.reject(fn {k, _v} -> k in [Pleroma.Repo, :env] end)
     |> Enum.each(fn {key, value} ->
-      key_str = inspect(key)
+      key = inspect(key)
+      {:ok, _} = Config.update_or_create(%{group: inspect(group), key: key, value: value})
 
-      {:ok, _} = Config.update_or_create(%{group: ":#{group}", key: key_str, value: value})
-      Mix.shell().info("settings for key #{key_str} migrated.")
+      Mix.shell().info("settings for key #{key} migrated.")
     end)
 
     Mix.shell().info("settings for group :#{group} migrated.")
index 4b3dd8bbda119c065c4a8fb8c0d346b2589e2a1a..d1314cf99cac98edcddd97537d660d446bd3f8fd 100644 (file)
@@ -5,6 +5,8 @@
 defmodule Pleroma.Config.TransferTaskTest do
   use Pleroma.DataCase
 
+  alias Pleroma.Web.AdminAPI.Config
+
   clear_config([:instance, :dynamic_configuration]) do
     Pleroma.Config.put([:instance, :dynamic_configuration], true)
   end
@@ -12,32 +14,41 @@ defmodule Pleroma.Config.TransferTaskTest do
   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)
 
-    Pleroma.Web.AdminAPI.Config.create(%{
+    Config.create(%{
       group: ":pleroma",
       key: ":test_key",
       value: [live: 2, com: 3]
     })
 
-    Pleroma.Web.AdminAPI.Config.create(%{
+    Config.create(%{
       group: ":idna",
       key: ":test_key",
       value: [live: 15, com: 35]
     })
 
+    Config.create(%{
+      group: ":quack",
+      key: ":test_key",
+      value: [:test_value1, :test_value2]
+    })
+
     Pleroma.Config.TransferTask.start_link([])
 
     assert Application.get_env(:pleroma, :test_key) == [live: 2, com: 3]
     assert Application.get_env(:idna, :test_key) == [live: 15, com: 35]
+    assert Application.get_env(:quack, :test_key) == [:test_value1, :test_value2]
 
     on_exit(fn ->
       Application.delete_env(:pleroma, :test_key)
       Application.delete_env(:idna, :test_key)
+      Application.delete_env(:quack, :test_key)
     end)
   end
 
   test "non existing atom" do
-    Pleroma.Web.AdminAPI.Config.create(%{
+    Config.create(%{
       group: ":pleroma",
       key: ":undefined_atom_key",
       value: [live: 2, com: 3]
index 055f678b99403887a7c767c5a17099ee45bf0070..dfe3904ca86f56c902d040afffc9c89b5ec1ded3 100644 (file)
@@ -24,19 +24,24 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
   end
 
   test "settings are migrated to db" do
+    initial = Application.get_all_env(:quack)
+    on_exit(fn -> Application.put_all_env([{:quack, initial}]) end)
     assert Repo.all(Config) == []
 
     Application.put_env(:pleroma, :first_setting, key: "value", key2: [Repo])
     Application.put_env(:pleroma, :second_setting, key: "value2", key2: ["Activity"])
+    Application.put_env(:quack, :level, :info)
 
     Mix.Tasks.Pleroma.Config.run(["migrate_to_db"])
 
     config1 = Config.get_by_params(%{group: ":pleroma", key: ":first_setting"})
     config2 = Config.get_by_params(%{group: ":pleroma", key: ":second_setting"})
+    config3 = Config.get_by_params(%{group: ":quack", key: ":level"})
     refute Config.get_by_params(%{group: ":pleroma", key: "Pleroma.Repo"})
 
     assert Config.from_binary(config1.value) == [key: "value", key2: [Repo]]
     assert Config.from_binary(config2.value) == [key: "value2", key2: ["Activity"]]
+    assert Config.from_binary(config3.value) == :info
   end
 
   test "settings are migrated to file and deleted from db" do
@@ -59,6 +64,8 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
       value: [key: "value2", key2: [Repo]]
     })
 
+    Config.create(%{group: ":quack", key: ":level", value: :info})
+
     Mix.Tasks.Pleroma.Config.run(["migrate_from_db", "--env", env, "-d"])
 
     assert Repo.all(Config) == []
@@ -66,6 +73,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
     file = File.read!(config_file)
     assert file =~ "config :pleroma, :setting_first,"
     assert file =~ "config :pleroma, :setting_second,"
+    assert file =~ "config :quack, :level, :info"
   end
 
   test "load a settings with large values and pass to file", %{temp_file: temp_file} do
index fd54504ac41537d18118090e7347f0b196d06ee9..1372edcab241e0bf582fad6d41e6f8dfe02c46c4 100644 (file)
@@ -1970,8 +1970,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
     setup %{conn: conn} do
       admin = insert(:user, is_admin: true)
 
-      temp_file = "config/test.exported_from_db.secret.exs"
-
       on_exit(fn ->
         Application.delete_env(:pleroma, :key1)
         Application.delete_env(:pleroma, :key2)
@@ -1981,7 +1979,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
         Application.delete_env(:pleroma, :keyaa2)
         Application.delete_env(:pleroma, Pleroma.Web.Endpoint.NotReal)
         Application.delete_env(:pleroma, Pleroma.Captcha.NotReal)
-        :ok = File.rm(temp_file)
+        :ok = File.rm("config/test.exported_from_db.secret.exs")
       end)
 
       %{conn: assign(conn, :user, admin)}
@@ -2101,6 +2099,48 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
       assert Application.get_env(:idna, :key5) == {"string", Pleroma.Captcha.NotReal, []}
     end
 
+    test "save config setting without key", %{conn: conn} do
+      initial = Application.get_all_env(:quack)
+      on_exit(fn -> Application.put_all_env([{:quack, initial}]) end)
+
+      conn =
+        post(conn, "/api/pleroma/admin/config", %{
+          configs: [
+            %{
+              group: ":quack",
+              key: ":level",
+              value: ":info"
+            },
+            %{
+              group: ":quack",
+              key: ":meta",
+              value: [":none"]
+            },
+            %{
+              group: ":quack",
+              key: ":webhook_url",
+              value: "https://hooks.slack.com/services/KEY"
+            }
+          ]
+        })
+
+      assert json_response(conn, 200) == %{
+               "configs" => [
+                 %{"group" => ":quack", "key" => ":level", "value" => ":info"},
+                 %{"group" => ":quack", "key" => ":meta", "value" => [":none"]},
+                 %{
+                   "group" => ":quack",
+                   "key" => ":webhook_url",
+                   "value" => "https://hooks.slack.com/services/KEY"
+                 }
+               ]
+             }
+
+      assert Application.get_env(:quack, :level) == :info
+      assert Application.get_env(:quack, :meta) == [:none]
+      assert Application.get_env(:quack, :webhook_url) == "https://hooks.slack.com/services/KEY"
+    end
+
     test "update config setting & delete", %{conn: conn} do
       config1 = insert(:config, key: ":keyaa1")
       config2 = insert(:config, key: ":keyaa2")