use Oban.Testing, repo: Pleroma.Repo
alias Pleroma.Activity
+ alias Pleroma.ConfigDB
alias Pleroma.HTML
alias Pleroma.ModerationLog
alias Pleroma.Repo
end
describe "GET /api/pleroma/admin/config" do
- clear_config([:configurable_from_database]) do
- Pleroma.Config.put([:configurable_from_database], true)
+ clear_config(:configurable_from_database) do
+ Pleroma.Config.put(:configurable_from_database, true)
end
test "when configuration from database is off", %{conn: conn} do
- initial = Pleroma.Config.get([:configurable_from_database])
- Pleroma.Config.put([:configurable_from_database], false)
- on_exit(fn -> Pleroma.Config.put([:configurable_from_database], initial) end)
+ initial = Pleroma.Config.get(:configurable_from_database)
+ Pleroma.Config.put(:configurable_from_database, false)
+ on_exit(fn -> Pleroma.Config.put(:configurable_from_database, initial) end)
conn = get(conn, "/api/pleroma/admin/config")
assert json_response(conn, 400) ==
"To use configuration from database migrate your settings to database."
end
- test "with settings in db", %{conn: conn} do
+ test "with settings only in db", %{conn: conn} do
config1 = insert(:config)
config2 = insert(:config)
- conn = get(conn, "/api/pleroma/admin/config")
+ conn = get(conn, "/api/pleroma/admin/config", %{"only_db" => true})
%{
"configs" => [
"value" => _
},
%{
+ "group" => ":pleroma",
"key" => key2,
"value" => _
}
assert key1 == config1.key
assert key2 == config2.key
end
+
+ test "merged default setting with db settings", %{conn: conn} do
+ config1 = insert(:config)
+ config2 = insert(:config)
+
+ config3 =
+ insert(:config,
+ value: ConfigDB.to_binary(k1: :v1, k2: :v2)
+ )
+
+ conn = get(conn, "/api/pleroma/admin/config")
+
+ %{"configs" => configs} = json_response(conn, 200)
+
+ assert length(configs) > 3
+
+ received_configs =
+ Enum.filter(configs, fn %{"group" => group, "key" => key} ->
+ group == ":pleroma" and key in [config1.key, config2.key, config3.key]
+ end)
+
+ assert length(received_configs) == 3
+
+ db_keys =
+ config3.value
+ |> ConfigDB.from_binary()
+ |> Keyword.keys()
+ |> ConfigDB.convert()
+
+ Enum.each(received_configs, fn %{"value" => value, "db" => db} ->
+ assert db in [config1.key, config2.key, db_keys]
+
+ assert value in [
+ ConfigDB.from_binary_with_convert(config1.value),
+ ConfigDB.from_binary_with_convert(config2.value),
+ ConfigDB.from_binary_with_convert(config3.value)
+ ]
+ end)
+ end
end
test "POST /api/pleroma/admin/config error", %{conn: conn} do
end)
end
- clear_config([:configurable_from_database]) do
- Pleroma.Config.put([:configurable_from_database], true)
+ clear_config(:configurable_from_database) do
+ Pleroma.Config.put(:configurable_from_database, true)
end
@tag capture_log: true
}
end
- test "dispatch setting", %{conn: conn} do
- conn =
- post(conn, "/api/pleroma/admin/config", %{
- configs: [
- %{
- "group" => ":pleroma",
- "key" => "Pleroma.Web.Endpoint.NotReal",
- "value" => [
- %{
- "tuple" => [
- ":http",
- [
- %{"tuple" => [":ip", %{"tuple" => [127, 0, 0, 1]}]},
- %{"tuple" => [":dispatch", ["{:_,
- [
- {\"/api/v1/streaming\", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
- {\"/websocket\", Phoenix.Endpoint.CowboyWebSocket,
- {Phoenix.Transports.WebSocket,
- {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: \"/websocket\"]}}},
- {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
- ]}"]]}
- ]
- ]
- }
- ]
- }
- ]
- })
-
- dispatch_string =
- "{:_, [{\"/api/v1/streaming\", Pleroma.Web.MastodonAPI.WebsocketHandler, []}, " <>
- "{\"/websocket\", Phoenix.Endpoint.CowboyWebSocket, {Phoenix.Transports.WebSocket, " <>
- "{Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: \"/websocket\"]}}}, " <>
- "{:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}]}"
-
- assert json_response(conn, 200) == %{
- "configs" => [
- %{
- "group" => ":pleroma",
- "key" => "Pleroma.Web.Endpoint.NotReal",
- "value" => [
- %{
- "tuple" => [
- ":http",
- [
- %{"tuple" => [":ip", %{"tuple" => [127, 0, 0, 1]}]},
- %{
- "tuple" => [
- ":dispatch",
- [
- dispatch_string
- ]
- ]
- }
- ]
- ]
- }
- ]
- }
- ]
- }
- end
-
test "queues key as atom", %{conn: conn} do
conn =
post(conn, "/api/pleroma/admin/config", %{
:ok
end
- clear_config([:configurable_from_database]) do
- Pleroma.Config.put([:configurable_from_database], true)
+ clear_config(:configurable_from_database) do
+ Pleroma.Config.put(:configurable_from_database, true)
end
clear_config([:feed, :post_title]) do
end
test "transfer settings to DB and to file", %{conn: conn} do
- on_exit(fn -> :ok = File.rm("config/test.exported_from_db.secret.exs") end)
- assert Repo.all(Pleroma.Web.AdminAPI.Config) == []
- Mix.Tasks.Pleroma.Config.run(["migrate_to_db"])
- assert Repo.aggregate(Pleroma.Web.AdminAPI.Config, :count, :id) > 0
+ assert Repo.all(Pleroma.ConfigDB) == []
+ Mix.Tasks.Pleroma.Config.migrate_to_db("test/fixtures/config/temp.secret.exs")
+ assert Repo.aggregate(Pleroma.ConfigDB, :count, :id) > 0
conn = get(conn, "/api/pleroma/admin/config/migrate_from_db")
assert json_response(conn, 200) == %{}
- assert Repo.all(Pleroma.Web.AdminAPI.Config) == []
+ assert Repo.all(Pleroma.ConfigDB) == []
end
test "returns error if configuration from database is off", %{conn: conn} do
- initial = Pleroma.Config.get([:configurable_from_database])
- on_exit(fn -> Pleroma.Config.put([:configurable_from_database], initial) end)
- Pleroma.Config.put([:configurable_from_database], false)
+ initial = Pleroma.Config.get(:configurable_from_database)
+ on_exit(fn -> Pleroma.Config.put(:configurable_from_database, initial) end)
+ Pleroma.Config.put(:configurable_from_database, false)
conn = get(conn, "/api/pleroma/admin/config/migrate_from_db")
assert json_response(conn, 400) ==
"To use this endpoint you need to enable configuration from database."
- assert Repo.all(Pleroma.Web.AdminAPI.Config) == []
+ assert Repo.all(Pleroma.ConfigDB) == []
end
end