aboutsummaryrefslogtreecommitdiff
path: root/test/mix/tasks
diff options
context:
space:
mode:
Diffstat (limited to 'test/mix/tasks')
-rw-r--r--test/mix/tasks/pleroma/config_test.exs184
1 files changed, 152 insertions, 32 deletions
diff --git a/test/mix/tasks/pleroma/config_test.exs b/test/mix/tasks/pleroma/config_test.exs
index 3ed1e94b8..6fcef232c 100644
--- a/test/mix/tasks/pleroma/config_test.exs
+++ b/test/mix/tasks/pleroma/config_test.exs
@@ -29,24 +29,56 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
|> Enum.sort()
end
- defp insert_config_record(group, key, value) do
+ defp insert_config_record(group \\ nil, key, value) do
insert(:config,
- group: group,
+ group: group || :pleroma,
key: key,
value: value
)
end
test "error if file with custom settings doesn't exist" do
- MixTask.migrate_to_db("config/non_existent_config_file.exs")
+ MixTask.run([
+ "migrate_to_db",
+ "--config",
+ "config/not_existance_config_file.exs"
+ ])
msg =
- "To migrate settings, you must define custom settings in config/non_existent_config_file.exs."
+ "ConfigDB not enabled. Please check the value of :configurable_from_database in your configuration."
- assert_receive {:mix_shell, :info, [^msg]}, 15
+ assert_receive {:mix_shell, :error, [^msg]}, 15
end
- describe "migrate_to_db/1" do
+ test "migrate_to_db error if configurable_from_database is not enabled" do
+ clear_config(:configurable_from_database, false)
+
+ MixTask.run([
+ "migrate_to_db",
+ "--config",
+ "test/fixtures/config/temp.secret.exs"
+ ])
+
+ assert_received {:mix_shell, :error, [message]}
+
+ assert message =~
+ "ConfigDB not enabled. Please check the value of :configurable_from_database in your configuration."
+ end
+
+ test "migrate_from_db error if configurable_from_database is not enabled" do
+ clear_config(:configurable_from_database, false)
+
+ MixTask.run([
+ "migrate_from_db"
+ ])
+
+ assert_received {:mix_shell, :error, [message]}
+
+ assert message =~
+ "ConfigDB not enabled. Please check the value of :configurable_from_database in your configuration."
+ end
+
+ describe "migrate_to_db task" do
setup do
clear_config(:configurable_from_database, true)
clear_config([:quack, :level])
@@ -57,7 +89,11 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
clear_config([:media_proxy, :whitelist], ["domain_without_scheme.com"])
assert config_records() == []
- MixTask.migrate_to_db("test/fixtures/config/temp.secret.exs")
+ MixTask.run([
+ "migrate_to_db",
+ "--config",
+ "test/fixtures/config/temp.secret.exs"
+ ])
assert_received {:mix_shell, :error, [message]}
@@ -68,25 +104,45 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
test "filtered settings are migrated to db" do
assert config_records() == []
- MixTask.migrate_to_db("test/fixtures/config/temp.secret.exs")
+ MixTask.run([
+ "migrate_to_db",
+ "--config",
+ "test/fixtures/config/temp.secret.exs"
+ ])
- config1 = ConfigDB.get_by_params(%{group: ":pleroma", key: ":first_setting"})
- config2 = ConfigDB.get_by_params(%{group: ":pleroma", key: ":second_setting"})
- config3 = ConfigDB.get_by_params(%{group: ":quack", key: ":level"})
- refute ConfigDB.get_by_params(%{group: ":pleroma", key: "Pleroma.Repo"})
- refute ConfigDB.get_by_params(%{group: ":postgrex", key: ":json_library"})
- refute ConfigDB.get_by_params(%{group: ":pleroma", key: ":database"})
+ config1 = ConfigDB.get_by_params(%{group: :pleroma, key: :first_setting})
+ config2 = ConfigDB.get_by_params(%{group: :pleroma, key: :second_setting})
+ config3 = ConfigDB.get_by_params(%{group: :quack})
+ refute ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Repo})
+ refute ConfigDB.get_by_params(%{group: :postgrex, key: :json_library})
+ refute ConfigDB.get_by_params(%{group: :pleroma, key: :database})
assert config1.value == [key: "value", key2: [Repo]]
assert config2.value == [key: "value2", key2: ["Activity"]]
- assert config3.value == :info
+ assert config3.value == [level: :info]
+
+ assert Repo.aggregate(ConfigDB, :count) == 3
+
+ [version] = Repo.all(Pleroma.Config.Version)
+
+ assert version.backup == [
+ pleroma: [
+ second_setting: [key: "value2", key2: ["Activity"]],
+ first_setting: [key: "value", key2: [Pleroma.Repo]]
+ ],
+ quack: [level: :info]
+ ]
end
test "config table is truncated before migration" do
- insert_config_record(:pleroma, :first_setting, key: "value", key2: ["Activity"])
+ insert_config_record(:first_setting, key: "value", key2: ["Activity"])
assert length(config_records()) == 1
- MixTask.migrate_to_db("test/fixtures/config/temp.secret.exs")
+ MixTask.run([
+ "migrate_to_db",
+ "--config",
+ "test/fixtures/config/temp.secret.exs"
+ ])
config = ConfigDB.get_by_params(%{group: ":pleroma", key: ":first_setting"})
assert config.value == [key: "value", key2: [Repo]]
@@ -106,9 +162,9 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
end
test "settings are migrated to file and deleted from db", %{temp_file: temp_file} do
- insert_config_record(:pleroma, :setting_first, key: "value", key2: ["Activity"])
- insert_config_record(:pleroma, :setting_second, key: "value2", key2: [Repo])
- insert_config_record(:quack, :level, :info)
+ insert_config_record(:setting_first, key: "value", key2: ["Activity"])
+ insert_config_record(:setting_second, key: "value2", key2: [Repo])
+ insert_config_record(:quack, nil, level: :info)
MixTask.run(["migrate_from_db", "--env", "temp", "-d"])
@@ -117,7 +173,20 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
file = File.read!(temp_file)
assert file =~ "config :pleroma, :setting_first,"
assert file =~ "config :pleroma, :setting_second,"
- assert file =~ "config :quack, :level, :info"
+ assert file =~ "config :quack, level: :info"
+ end
+
+ test "migrate_from_db with config path in env", %{temp_file: temp_file} do
+ clear_config(:release, true)
+ clear_config(:config_path, "config/temp.exported_from_db.secret.exs")
+
+ insert_config_record(:setting_first, key: "value", key2: ["Activity"])
+
+ MixTask.run(["migrate_from_db", "--env", "temp", "-d"])
+
+ assert Repo.all(ConfigDB) == []
+ file = File.read!(temp_file)
+ assert file =~ "config :pleroma, :setting_first,"
end
test "load a settings with large values and pass to file", %{temp_file: temp_file} do
@@ -206,7 +275,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
setup do
insert_config_record(:pleroma, :setting_first, key: "value", key2: ["Activity"])
insert_config_record(:pleroma, :setting_second, key: "value2", key2: [Repo])
- insert_config_record(:quack, :level, :info)
+ insert_config_record(:quack, nil, level: :info)
path = "test/instance_static"
file_path = Path.join(path, "temp.exported_from_db.secret.exs")
@@ -222,7 +291,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
file = File.read!(file_path)
assert file =~ "config :pleroma, :setting_first,"
assert file =~ "config :pleroma, :setting_second,"
- assert file =~ "config :quack, :level, :info"
+ assert file =~ "config :quack, level: :info"
end
test "release", %{file_path: file_path} do
@@ -234,7 +303,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
file = File.read!(file_path)
assert file =~ "config :pleroma, :setting_first,"
assert file =~ "config :pleroma, :setting_second,"
- assert file =~ "config :quack, :level, :info"
+ assert file =~ "config :quack, level: :info"
end
end
@@ -242,7 +311,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
setup do: clear_config(:configurable_from_database, true)
test "dumping a specific group" do
- insert_config_record(:pleroma, :instance, name: "Pleroma Test")
+ insert_config_record(:instance, name: "Pleroma Test")
insert_config_record(:web_push_encryption, :vapid_details,
subject: "mailto:administrator@example.com",
@@ -272,8 +341,8 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
end
test "dumping a specific key in a group" do
- insert_config_record(:pleroma, :instance, name: "Pleroma Test")
- insert_config_record(:pleroma, Pleroma.Captcha, enabled: false)
+ insert_config_record(:instance, name: "Pleroma Test")
+ insert_config_record(Pleroma.Captcha, enabled: false)
MixTask.run(["dump", "pleroma", "Pleroma.Captcha"])
@@ -285,8 +354,8 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
end
test "dumps all configuration successfully" do
- insert_config_record(:pleroma, :instance, name: "Pleroma Test")
- insert_config_record(:pleroma, Pleroma.Captcha, enabled: false)
+ insert_config_record(:instance, name: "Pleroma Test")
+ insert_config_record(Pleroma.Captcha, enabled: false)
MixTask.run(["dump"])
@@ -302,7 +371,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
test "refuses to dump" do
clear_config(:configurable_from_database, false)
- insert_config_record(:pleroma, :instance, name: "Pleroma Test")
+ insert_config_record(:instance, name: "Pleroma Test")
MixTask.run(["dump"])
@@ -317,8 +386,8 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
setup do: clear_config(:configurable_from_database, true)
setup do
- insert_config_record(:pleroma, :instance, name: "Pleroma Test")
- insert_config_record(:pleroma, Pleroma.Captcha, enabled: false)
+ insert_config_record(:instance, name: "Pleroma Test")
+ insert_config_record(Pleroma.Captcha, enabled: false)
insert_config_record(:pleroma2, :key2, z: 1)
assert length(config_records()) == 3
@@ -347,4 +416,55 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
assert config_records() == []
end
end
+
+ describe "rollback/1" do
+ setup do: clear_config(:configurable_from_database, true)
+
+ test "configuration from database is not configured" do
+ clear_config(:configurable_from_database, false)
+
+ MixTask.run(["rollback"])
+
+ assert_received {:mix_shell, :error, [message]}
+
+ assert message =~
+ "ConfigDB not enabled. Please check the value of :configurable_from_database in your configuration."
+ end
+
+ test "error" do
+ MixTask.run(["rollback"])
+
+ assert_receive {:mix_shell, :error,
+ [
+ "No version to rollback"
+ ]},
+ 15
+ end
+
+ test "success rollback" do
+ insert(:config_version,
+ backup: [pleroma: [instance: [name: "First name", email: "email@example.com"]]]
+ )
+
+ insert(:config_version, current: true)
+
+ MixTask.run(["rollback"])
+
+ assert_received {:mix_shell, :info, ["Success rollback"]}
+
+ [config] = Repo.all(ConfigDB)
+
+ assert config.value == [name: "First name", email: "email@example.com"]
+ end
+
+ test "rollback not possible error" do
+ insert(:config_version, current: true)
+
+ MixTask.run(["rollback", "-s", "2"])
+
+ assert_received {:mix_shell, :error, [message]}
+
+ assert message =~ "Rollback not possible. Incorrect steps value."
+ end
+ end
end