--- /dev/null
+defmodule Pleroma.Config do
+ def get([key]), do: get(key)
+
+ def get([parent_key | keys]) do
+ Application.get_env(:pleroma, parent_key)
+ |> get_in(keys)
+ end
+
+ def get(key) do
+ Application.get_env(:pleroma, key)
+ end
+
+ def put([key], value), do: put(key, value)
+
+ def put([parent_key | keys], value) do
+ parent =
+ Application.get_env(:pleroma, parent_key)
+ |> put_in(keys, value)
+
+ Application.put_env(:pleroma, parent_key, parent)
+ end
+
+ def put(key, value) do
+ Application.put_env(:pleroma, key, value)
+ end
+end
--- /dev/null
+defmodule Pleroma.ConfigTest do
+ use ExUnit.Case
+
+ test "get/1 with an atom" do
+ assert Pleroma.Config.get(:instance) == Application.get_env(:pleroma, :instance)
+ assert Pleroma.Config.get(:azertyuiop) == nil
+ end
+
+ test "get/1 with a list of keys" do
+ assert Pleroma.Config.get([:instance, :public]) ==
+ Keyword.get(Application.get_env(:pleroma, :instance), :public)
+
+ assert Pleroma.Config.get([Pleroma.Web.Endpoint, :render_errors, :view]) ==
+ get_in(
+ Application.get_env(
+ :pleroma,
+ Pleroma.Web.Endpoint
+ ),
+ [:render_errors, :view]
+ )
+
+ assert Pleroma.Config.get([:azerty, :uiop]) == nil
+ end
+
+ test "put/2 with a key" do
+ Pleroma.Config.put(:config_test, true)
+
+ assert Pleroma.Config.get(:config_test) == true
+ end
+
+ test "put/2 with a list of keys" do
+ Pleroma.Config.put([:instance, :config_test], true)
+ Pleroma.Config.put([:instance, :config_nested_test], [])
+ Pleroma.Config.put([:instance, :config_nested_test, :x], true)
+
+ assert Pleroma.Config.get([:instance, :config_test]) == true
+ assert Pleroma.Config.get([:instance, :config_nested_test, :x]) == true
+ end
+end
end
test "with the relay disabled, it returns 404", %{conn: conn} do
- instance =
- Application.get_env(:pleroma, :instance)
- |> Keyword.put(:allow_relay, false)
-
- Application.put_env(:pleroma, :instance, instance)
+ Pleroma.Config.put([:instance, :allow_relay], false)
res =
conn
|> get(activity_pub_path(conn, :relay))
|> json_response(404)
- instance =
- Application.get_env(:pleroma, :instance)
- |> Keyword.put(:allow_relay, true)
-
- Application.put_env(:pleroma, :instance, instance)
+ Pleroma.Config.put([:instance, :allow_relay], true)
end
end
activity: activity,
relay_mock: relay_mock
} do
- instance =
- Application.get_env(:pleroma, :instance)
- |> Keyword.put(:allow_relay, false)
-
- Application.put_env(:pleroma, :instance, instance)
+ Pleroma.Config.put([:instance, :allow_relay], false)
with_mocks([relay_mock]) do
Federator.handle(:publish, activity)
refute_received :relay_publish
- instance =
- Application.get_env(:pleroma, :instance)
- |> Keyword.put(:allow_relay, true)
-
- Application.put_env(:pleroma, :instance, instance)
+ Pleroma.Config.put([:instance, :allow_relay], true)
end
end
end