1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.AdminAPI.ConfigTest do
6 use Pleroma.DataCase, async: true
8 alias Pleroma.Web.AdminAPI.Config
10 test "get_by_key/1" do
11 config = insert(:config)
14 assert config == Config.get_by_params(%{group: config.group, key: config.key})
18 {:ok, config} = Config.create(%{group: "pleroma", key: "some_key", value: "some_value"})
19 assert config == Config.get_by_params(%{group: "pleroma", key: "some_key"})
23 config = insert(:config)
24 {:ok, updated} = Config.update(config, %{value: "some_value"})
25 loaded = Config.get_by_params(%{group: config.group, key: config.key})
26 assert loaded == updated
29 test "update_or_create/1" do
30 config = insert(:config)
34 %{group: "pleroma", key: key2, value: "another_value"},
35 %{group: config.group, key: config.key, value: "new_value"}
38 assert Repo.all(Config) |> length() == 1
40 Enum.each(params, &Config.update_or_create(&1))
42 assert Repo.all(Config) |> length() == 2
44 config1 = Config.get_by_params(%{group: config.group, key: config.key})
45 config2 = Config.get_by_params(%{group: "pleroma", key: key2})
47 assert config1.value == Config.transform("new_value")
48 assert config2.value == Config.transform("another_value")
52 config = insert(:config)
53 {:ok, _} = Config.delete(%{key: config.key, group: config.group})
54 refute Config.get_by_params(%{key: config.key, group: config.group})
57 describe "transform/1" do
59 binary = Config.transform("value as string")
60 assert binary == :erlang.term_to_binary("value as string")
61 assert Config.from_binary(binary) == "value as string"
64 test "list of modules" do
65 binary = Config.transform(["Pleroma.Repo", "Pleroma.Activity"])
66 assert binary == :erlang.term_to_binary([Pleroma.Repo, Pleroma.Activity])
67 assert Config.from_binary(binary) == [Pleroma.Repo, Pleroma.Activity]
70 test "list of strings" do
71 binary = Config.transform(["string1", "string2"])
72 assert binary == :erlang.term_to_binary(["string1", "string2"])
73 assert Config.from_binary(binary) == ["string1", "string2"]
79 "types" => "Pleroma.PostgresTypes",
80 "telemetry_event" => ["Pleroma.Repo.Instrumenter"],
81 "migration_lock" => ""
85 :erlang.term_to_binary(
86 telemetry_event: [Pleroma.Repo.Instrumenter],
87 types: Pleroma.PostgresTypes
90 assert Config.from_binary(binary) == [
91 telemetry_event: [Pleroma.Repo.Instrumenter],
92 types: Pleroma.PostgresTypes
96 test "complex map with nested integers, lists and atoms" do
99 "uploader" => "Pleroma.Uploaders.Local",
100 "filters" => ["Pleroma.Upload.Filter.Dedupe"],
101 "link_name" => ":true",
102 "proxy_remote" => ":false",
104 "redirect_on_failure" => ":false",
105 "max_body_length" => "i:1048576",
107 "follow_redirect" => ":true",
114 :erlang.term_to_binary(
115 filters: [Pleroma.Upload.Filter.Dedupe],
119 follow_redirect: true,
122 max_body_length: 1_048_576,
123 redirect_on_failure: false
126 uploader: Pleroma.Uploaders.Local
129 assert Config.from_binary(binary) ==
131 filters: [Pleroma.Upload.Filter.Dedupe],
135 follow_redirect: true,
138 max_body_length: 1_048_576,
139 redirect_on_failure: false
142 uploader: Pleroma.Uploaders.Local
151 "webhook_url" => "https://hooks.slack.com/services/YOUR-KEY-HERE"
155 :erlang.term_to_binary(
158 webhook_url: "https://hooks.slack.com/services/YOUR-KEY-HERE"
161 assert Config.from_binary(binary) == [
164 webhook_url: "https://hooks.slack.com/services/YOUR-KEY-HERE"
168 test "complex map with sigil" do
171 federated_timeline_removal: [],
172 reject: [~r/comp[lL][aA][iI][nN]er/],
177 :erlang.term_to_binary(
178 federated_timeline_removal: [],
179 reject: [~r/comp[lL][aA][iI][nN]er/],
183 assert Config.from_binary(binary) ==
184 [federated_timeline_removal: [], reject: [~r/comp[lL][aA][iI][nN]er/], replace: []]
187 test "complex map with tuples with more than 2 values" do
199 "Pleroma.Web.MastodonAPI.WebsocketHandler",
206 "Phoenix.Endpoint.CowboyWebSocket",
209 "Phoenix.Transports.WebSocket",
210 %{"tuple" => ["Pleroma.Web.Endpoint", "Pleroma.Web.UserSocket", []]}
218 "Phoenix.Endpoint.Cowboy2Handler",
220 "tuple" => ["Pleroma.Web.Endpoint", []]
232 :erlang.term_to_binary(
236 {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
237 {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
238 {Phoenix.Transports.WebSocket,
239 {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, []}}},
240 {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
246 assert Config.from_binary(binary) == [
251 {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
252 {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
253 {Phoenix.Transports.WebSocket,
254 {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, []}}},
255 {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}