summaryrefslogtreecommitdiff
path: root/test/web/admin_api/config_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'test/web/admin_api/config_test.exs')
-rw-r--r--test/web/admin_api/config_test.exs190
1 files changed, 171 insertions, 19 deletions
diff --git a/test/web/admin_api/config_test.exs b/test/web/admin_api/config_test.exs
index 204446b79..2c0601b56 100644
--- a/test/web/admin_api/config_test.exs
+++ b/test/web/admin_api/config_test.exs
@@ -26,26 +26,112 @@ defmodule Pleroma.Web.AdminAPI.ConfigTest do
assert loaded == updated
end
- test "update_or_create/1" do
- config = insert(:config)
- key2 = "another_key"
+ describe "update_or_create/1" do
+ test "common" do
+ config = insert(:config)
+ key2 = "another_key"
+
+ params = [
+ %{group: "pleroma", key: key2, value: "another_value"},
+ %{group: config.group, key: config.key, value: "new_value"}
+ ]
+
+ assert Repo.all(Config) |> length() == 1
+
+ Enum.each(params, &Config.update_or_create(&1))
- params = [
- %{group: "pleroma", key: key2, value: "another_value"},
- %{group: config.group, key: config.key, value: "new_value"}
- ]
+ assert Repo.all(Config) |> length() == 2
- assert Repo.all(Config) |> length() == 1
+ config1 = Config.get_by_params(%{group: config.group, key: config.key})
+ config2 = Config.get_by_params(%{group: "pleroma", key: key2})
- Enum.each(params, &Config.update_or_create(&1))
+ assert config1.value == Config.transform("new_value")
+ assert config2.value == Config.transform("another_value")
+ end
+
+ test "partial update" do
+ config = insert(:config, value: Config.to_binary(key1: "val1", key2: :val2))
- assert Repo.all(Config) |> length() == 2
+ {:ok, _config} =
+ Config.update_or_create(%{
+ group: config.group,
+ key: config.key,
+ value: [key1: :val1, key3: :val3]
+ })
- config1 = Config.get_by_params(%{group: config.group, key: config.key})
- config2 = Config.get_by_params(%{group: "pleroma", key: key2})
+ updated = Config.get_by_params(%{group: config.group, key: config.key})
- assert config1.value == Config.transform("new_value")
- assert config2.value == Config.transform("another_value")
+ value = Config.from_binary(updated.value)
+ assert length(value) == 3
+ assert value[:key1] == :val1
+ assert value[:key2] == :val2
+ assert value[:key3] == :val3
+ end
+
+ test "deep merge" do
+ config = insert(:config, value: Config.to_binary(key1: "val1", key2: [k1: :v1, k2: "v2"]))
+
+ {:ok, config} =
+ Config.update_or_create(%{
+ group: config.group,
+ key: config.key,
+ value: [key1: :val1, key2: [k2: :v2, k3: :v3], key3: :val3]
+ })
+
+ updated = Config.get_by_params(%{group: config.group, key: config.key})
+
+ assert config.value == updated.value
+
+ value = Config.from_binary(updated.value)
+ assert value[:key1] == :val1
+ assert value[:key2] == [k1: :v1, k2: :v2, k3: :v3]
+ assert value[:key3] == :val3
+ end
+
+ test "only full update for some keys" do
+ config1 = insert(:config, key: ":ecto_repos", value: Config.to_binary(repo: Pleroma.Repo))
+ config2 = insert(:config, group: ":cors_plug", key: ":max_age", value: Config.to_binary(18))
+
+ {:ok, _config} =
+ Config.update_or_create(%{
+ group: config1.group,
+ key: config1.key,
+ value: [another_repo: [Pleroma.Repo]]
+ })
+
+ {:ok, _config} =
+ Config.update_or_create(%{
+ group: config2.group,
+ key: config2.key,
+ value: 777
+ })
+
+ updated1 = Config.get_by_params(%{group: config1.group, key: config1.key})
+ updated2 = Config.get_by_params(%{group: config2.group, key: config2.key})
+
+ assert Config.from_binary(updated1.value) == [another_repo: [Pleroma.Repo]]
+ assert Config.from_binary(updated2.value) == 777
+ end
+
+ test "full update if value is not keyword" do
+ config =
+ insert(:config,
+ group: ":tesla",
+ key: ":adapter",
+ value: Config.to_binary(Tesla.Adapter.Hackney)
+ )
+
+ {:ok, _config} =
+ Config.update_or_create(%{
+ group: config.group,
+ key: config.key,
+ value: Tesla.Adapter.Httpc
+ })
+
+ updated = Config.get_by_params(%{group: config.group, key: config.key})
+
+ assert Config.from_binary(updated.value) == Tesla.Adapter.Httpc
+ end
end
test "delete/1" do
@@ -85,20 +171,50 @@ defmodule Pleroma.Web.AdminAPI.ConfigTest do
assert Config.from_binary(binary) == :atom
end
+ test "ssl options" do
+ binary = Config.transform([":tlsv1", ":tlsv1.1", ":tlsv1.2"])
+ assert binary == :erlang.term_to_binary([:tlsv1, :"tlsv1.1", :"tlsv1.2"])
+ assert Config.from_binary(binary) == [:tlsv1, :"tlsv1.1", :"tlsv1.2"]
+ end
+
test "pleroma module" do
binary = Config.transform("Pleroma.Bookmark")
assert binary == :erlang.term_to_binary(Pleroma.Bookmark)
assert Config.from_binary(binary) == Pleroma.Bookmark
end
+ test "pleroma string" do
+ binary = Config.transform("Pleroma")
+ assert binary == :erlang.term_to_binary("Pleroma")
+ assert Config.from_binary(binary) == "Pleroma"
+ end
+
test "phoenix module" do
binary = Config.transform("Phoenix.Socket.V1.JSONSerializer")
assert binary == :erlang.term_to_binary(Phoenix.Socket.V1.JSONSerializer)
assert Config.from_binary(binary) == Phoenix.Socket.V1.JSONSerializer
end
+ test "tesla module" do
+ binary = Config.transform("Tesla.Adapter.Hackney")
+ assert binary == :erlang.term_to_binary(Tesla.Adapter.Hackney)
+ assert Config.from_binary(binary) == Tesla.Adapter.Hackney
+ end
+
+ test "ExSyslogger module" do
+ binary = Config.transform("ExSyslogger")
+ assert binary == :erlang.term_to_binary(ExSyslogger)
+ assert Config.from_binary(binary) == ExSyslogger
+ end
+
+ test "Quack.Logger module" do
+ binary = Config.transform("Quack.Logger")
+ assert binary == :erlang.term_to_binary(Quack.Logger)
+ assert Config.from_binary(binary) == Quack.Logger
+ end
+
test "sigil" do
- binary = Config.transform("~r/comp[lL][aA][iI][nN]er/")
+ binary = Config.transform("~r[comp[lL][aA][iI][nN]er]")
assert binary == :erlang.term_to_binary(~r/comp[lL][aA][iI][nN]er/)
assert Config.from_binary(binary) == ~r/comp[lL][aA][iI][nN]er/
end
@@ -109,10 +225,10 @@ defmodule Pleroma.Web.AdminAPI.ConfigTest do
assert Config.from_binary(binary) == ~r/https:\/\/example.com/
end
- test "link sigil with u modifier" do
- binary = Config.transform("~r/https:\/\/example.com/u")
- assert binary == :erlang.term_to_binary(~r/https:\/\/example.com/u)
- assert Config.from_binary(binary) == ~r/https:\/\/example.com/u
+ test "link sigil with um modifiers" do
+ binary = Config.transform("~r/https:\/\/example.com/um")
+ assert binary == :erlang.term_to_binary(~r/https:\/\/example.com/um)
+ assert Config.from_binary(binary) == ~r/https:\/\/example.com/um
end
test "link sigil with i modifier" do
@@ -127,12 +243,48 @@ defmodule Pleroma.Web.AdminAPI.ConfigTest do
assert Config.from_binary(binary) == ~r/https:\/\/example.com/s
end
+ test "raise if valid delimiter not found" do
+ assert_raise ArgumentError, "valid delimiter for Regex expression not found", fn ->
+ Config.transform("~r/https://[]{}<>\"'()|example.com/s")
+ end
+ end
+
test "2 child tuple" do
binary = Config.transform(%{"tuple" => ["v1", ":v2"]})
assert binary == :erlang.term_to_binary({"v1", :v2})
assert Config.from_binary(binary) == {"v1", :v2}
end
+ test "proxy tuple with localhost" do
+ binary =
+ Config.transform(%{
+ "tuple" => [":proxy_url", %{"tuple" => [":socks5", "localhost", 1234]}]
+ })
+
+ assert binary == :erlang.term_to_binary({:proxy_url, {:socks5, :localhost, 1234}})
+ assert Config.from_binary(binary) == {:proxy_url, {:socks5, :localhost, 1234}}
+ end
+
+ test "proxy tuple with domain" do
+ binary =
+ Config.transform(%{
+ "tuple" => [":proxy_url", %{"tuple" => [":socks5", "domain.com", 1234]}]
+ })
+
+ assert binary == :erlang.term_to_binary({:proxy_url, {:socks5, 'domain.com', 1234}})
+ assert Config.from_binary(binary) == {:proxy_url, {:socks5, 'domain.com', 1234}}
+ end
+
+ test "proxy tuple with ip" do
+ binary =
+ Config.transform(%{
+ "tuple" => [":proxy_url", %{"tuple" => [":socks5", "127.0.0.1", 1234]}]
+ })
+
+ assert binary == :erlang.term_to_binary({:proxy_url, {:socks5, {127, 0, 0, 1}, 1234}})
+ assert Config.from_binary(binary) == {:proxy_url, {:socks5, {127, 0, 0, 1}, 1234}}
+ end
+
test "tuple with n childs" do
binary =
Config.transform(%{