1 defmodule Pleroma.Web.AdminAPI.ConfigTest do
2 use Pleroma.DataCase, async: true
4 alias Pleroma.Web.AdminAPI.Config
7 config = insert(:config)
10 assert config == Config.get_by_params(%{group: config.group, key: config.key})
14 {:ok, config} = Config.create(%{group: "pleroma", key: "some_key", value: "some_value"})
15 assert config == Config.get_by_params(%{group: "pleroma", key: "some_key"})
19 config = insert(:config)
20 {:ok, updated} = Config.update(config, %{value: "some_value"})
21 loaded = Config.get_by_params(%{group: config.group, key: config.key})
22 assert loaded == updated
25 test "update_or_create/1" do
26 config = insert(:config)
30 %{group: "pleroma", key: key2, value: "another_value"},
31 %{group: config.group, key: config.key, value: "new_value"}
34 assert Repo.all(Config) |> length() == 1
36 Enum.each(params, &Config.update_or_create(&1))
38 assert Repo.all(Config) |> length() == 2
40 config1 = Config.get_by_params(%{group: config.group, key: config.key})
41 config2 = Config.get_by_params(%{group: "pleroma", key: key2})
43 assert config1.value == Config.transform("new_value")
44 assert config2.value == Config.transform("another_value")
48 config = insert(:config)
49 {:ok, _} = Config.delete(%{key: config.key, group: config.group})
50 refute Config.get_by_params(%{key: config.key, group: config.group})
53 describe "transform/1" do
55 binary = Config.transform("value as string")
56 assert binary == :erlang.term_to_binary("value as string")
57 assert Config.from_binary(binary) == "value as string"
60 test "list of modules" do
61 binary = Config.transform(["Pleroma.Repo", "Pleroma.Activity"])
62 assert binary == :erlang.term_to_binary([Pleroma.Repo, Pleroma.Activity])
63 assert Config.from_binary(binary) == [Pleroma.Repo, Pleroma.Activity]
66 test "list of strings" do
67 binary = Config.transform(["string1", "string2"])
68 assert binary == :erlang.term_to_binary(["string1", "string2"])
69 assert Config.from_binary(binary) == ["string1", "string2"]
75 "types" => "Pleroma.PostgresTypes",
76 "telemetry_event" => ["Pleroma.Repo.Instrumenter"],
77 "migration_lock" => ""
81 :erlang.term_to_binary(
82 telemetry_event: [Pleroma.Repo.Instrumenter],
83 types: Pleroma.PostgresTypes
86 assert Config.from_binary(binary) == [
87 telemetry_event: [Pleroma.Repo.Instrumenter],
88 types: Pleroma.PostgresTypes
92 test "complex map with nested integers, lists and atoms" do
95 "uploader" => "Pleroma.Uploaders.Local",
96 "filters" => ["Pleroma.Upload.Filter.Dedupe"],
97 "link_name" => ":true",
98 "proxy_remote" => ":false",
100 "redirect_on_failure" => ":false",
101 "max_body_length" => "i:1048576",
103 "follow_redirect" => ":true",
110 :erlang.term_to_binary(
111 filters: [Pleroma.Upload.Filter.Dedupe],
115 follow_redirect: true,
118 max_body_length: 1_048_576,
119 redirect_on_failure: false
122 uploader: Pleroma.Uploaders.Local
125 assert Config.from_binary(binary) ==
127 filters: [Pleroma.Upload.Filter.Dedupe],
131 follow_redirect: true,
134 max_body_length: 1_048_576,
135 redirect_on_failure: false
138 uploader: Pleroma.Uploaders.Local
147 "webhook_url" => "https://hooks.slack.com/services/YOUR-KEY-HERE"
151 :erlang.term_to_binary(
154 webhook_url: "https://hooks.slack.com/services/YOUR-KEY-HERE"
157 assert Config.from_binary(binary) == [
160 webhook_url: "https://hooks.slack.com/services/YOUR-KEY-HERE"
164 test "complex map with sigil" do
167 federated_timeline_removal: [],
168 reject: [~r/comp[lL][aA][iI][nN]er/],
173 :erlang.term_to_binary(
174 federated_timeline_removal: [],
175 reject: [~r/comp[lL][aA][iI][nN]er/],
179 assert Config.from_binary(binary) ==
180 [federated_timeline_removal: [], reject: [~r/comp[lL][aA][iI][nN]er/], replace: []]
183 test "complex map with tuples with more than 2 values" do
195 "Pleroma.Web.MastodonAPI.WebsocketHandler",
202 "Phoenix.Endpoint.CowboyWebSocket",
205 "Phoenix.Transports.WebSocket",
206 %{"tuple" => ["Pleroma.Web.Endpoint", "Pleroma.Web.UserSocket", []]}
214 "Phoenix.Endpoint.Cowboy2Handler",
216 "tuple" => ["Pleroma.Web.Endpoint", []]
228 :erlang.term_to_binary(
232 {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
233 {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
234 {Phoenix.Transports.WebSocket,
235 {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, []}}},
236 {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
242 assert Config.from_binary(binary) == [
247 {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
248 {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
249 {Phoenix.Transports.WebSocket,
250 {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, []}}},
251 {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}