Deprecate and rewrite settings for quarentine settings
[akkoma] / test / pleroma / config / deprecation_warnings_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Config.DeprecationWarningsTest do
6 use ExUnit.Case
7 use Pleroma.Tests.Helpers
8
9 import ExUnit.CaptureLog
10
11 alias Pleroma.Config
12 alias Pleroma.Config.DeprecationWarnings
13
14 describe "simple policy tuples" do
15 test "gives warning when there are still strings" do
16 clear_config([:mrf_simple],
17 media_removal: ["some.removal"],
18 media_nsfw: ["some.nsfw"],
19 federated_timeline_removal: ["some.tl.removal"],
20 report_removal: ["some.report.removal"],
21 reject: ["some.reject"],
22 followers_only: ["some.followers.only"],
23 accept: ["some.accept"],
24 avatar_removal: ["some.avatar.removal"],
25 banner_removal: ["some.banner.removal"],
26 reject_deletes: ["some.reject.deletes"]
27 )
28
29 assert capture_log(fn -> DeprecationWarnings.check_simple_policy_tuples() end) =~
30 """
31 !!!DEPRECATION WARNING!!!
32 Your config is using strings in the SimplePolicy configuration instead of tuples. They should work for now, but you are advised to change to the new configuration to prevent possible issues later:
33
34 ```
35 config :pleroma, :mrf_simple,
36 media_removal: ["instance.tld"],
37 media_nsfw: ["instance.tld"],
38 federated_timeline_removal: ["instance.tld"],
39 report_removal: ["instance.tld"],
40 reject: ["instance.tld"],
41 followers_only: ["instance.tld"],
42 accept: ["instance.tld"],
43 avatar_removal: ["instance.tld"],
44 banner_removal: ["instance.tld"],
45 reject_deletes: ["instance.tld"]
46 ```
47
48 Is now
49
50
51 ```
52 config :pleroma, :mrf_simple,
53 media_removal: [{"instance.tld", "Reason for media removal"}],
54 media_nsfw: [{"instance.tld", "Reason for media nsfw"}],
55 federated_timeline_removal: [{"instance.tld", "Reason for federated timeline removal"}],
56 report_removal: [{"instance.tld", "Reason for report removal"}],
57 reject: [{"instance.tld", "Reason for reject"}],
58 followers_only: [{"instance.tld", "Reason for followers only"}],
59 accept: [{"instance.tld", "Reason for accept"}],
60 avatar_removal: [{"instance.tld", "Reason for avatar removal"}],
61 banner_removal: [{"instance.tld", "Reason for banner removal"}],
62 reject_deletes: [{"instance.tld", "Reason for reject deletes"}]
63 ```
64 """
65 end
66
67 test "transforms config to tuples" do
68 clear_config([:mrf_simple],
69 media_removal: ["some.removal", {"some.other.instance", "Some reason"}]
70 )
71
72 expected_config = [
73 {:media_removal, [{"some.removal", ""}, {"some.other.instance", "Some reason"}]}
74 ]
75
76 capture_log(fn -> DeprecationWarnings.check_simple_policy_tuples() end)
77
78 assert Config.get([:mrf_simple]) == expected_config
79 end
80
81 test "doesn't give a warning with correct config" do
82 clear_config([:mrf_simple],
83 media_removal: [{"some.removal", ""}, {"some.other.instance", "Some reason"}]
84 )
85
86 assert capture_log(fn -> DeprecationWarnings.check_simple_policy_tuples() end) == ""
87 end
88 end
89
90 describe "quarantined_instances tuples" do
91 test "gives warning when there are still strings" do
92 clear_config([:instance, :quarantined_instances], [
93 {"domain.com", "some reason"},
94 "somedomain.tld"
95 ])
96
97 assert capture_log(fn -> DeprecationWarnings.check_quarantined_instances_tuples() end) =~
98 """
99 !!!DEPRECATION WARNING!!!
100 Your config is using strings in the quarantined_instances configuration instead of tuples. They should work for now, but you are advised to change to the new configuration to prevent possible issues later:
101
102 ```
103 config :pleroma, :instance,
104 quarantined_instances: ["instance.tld"]
105 ```
106
107 Is now
108
109
110 ```
111 config :pleroma, :instance,
112 quarantined_instances: [{"instance.tld", "Reason for quarantine"}]
113 ```
114 """
115 end
116
117 test "transforms config to tuples" do
118 clear_config([:instance, :quarantined_instances], [
119 {"domain.com", "some reason"},
120 "some.tld"
121 ])
122
123 expected_config = [{"domain.com", "some reason"}, {"some.tld", ""}]
124
125 capture_log(fn -> DeprecationWarnings.check_quarantined_instances_tuples() end)
126
127 assert Config.get([:instance, :quarantined_instances]) == expected_config
128 end
129
130 test "doesn't give a warning with correct config" do
131 clear_config([:instance, :quarantined_instances], [
132 {"domain.com", "some reason"},
133 {"some.tld", ""}
134 ])
135
136 assert capture_log(fn -> DeprecationWarnings.check_quarantined_instances_tuples() end) == ""
137 end
138 end
139
140 test "check_old_mrf_config/0" do
141 clear_config([:instance, :rewrite_policy], [])
142 clear_config([:instance, :mrf_transparency], true)
143 clear_config([:instance, :mrf_transparency_exclusions], [])
144
145 assert capture_log(fn -> DeprecationWarnings.check_old_mrf_config() end) =~
146 """
147 !!!DEPRECATION WARNING!!!
148 Your config is using old namespaces for MRF configuration. They should work for now, but you are advised to change to new namespaces to prevent possible issues later:
149
150 * `config :pleroma, :instance, rewrite_policy` is now `config :pleroma, :mrf, policies`
151 * `config :pleroma, :instance, mrf_transparency` is now `config :pleroma, :mrf, transparency`
152 * `config :pleroma, :instance, mrf_transparency_exclusions` is now `config :pleroma, :mrf, transparency_exclusions`
153 """
154 end
155
156 test "move_namespace_and_warn/2" do
157 old_group1 = [:group, :key]
158 old_group2 = [:group, :key2]
159 old_group3 = [:group, :key3]
160
161 new_group1 = [:another_group, :key4]
162 new_group2 = [:another_group, :key5]
163 new_group3 = [:another_group, :key6]
164
165 clear_config(old_group1, 1)
166 clear_config(old_group2, 2)
167 clear_config(old_group3, 3)
168
169 clear_config(new_group1)
170 clear_config(new_group2)
171 clear_config(new_group3)
172
173 config_map = [
174 {old_group1, new_group1, "\n error :key"},
175 {old_group2, new_group2, "\n error :key2"},
176 {old_group3, new_group3, "\n error :key3"}
177 ]
178
179 assert capture_log(fn ->
180 DeprecationWarnings.move_namespace_and_warn(
181 config_map,
182 "Warning preface"
183 )
184 end) =~ "Warning preface\n error :key\n error :key2\n error :key3"
185
186 assert Config.get(new_group1) == 1
187 assert Config.get(new_group2) == 2
188 assert Config.get(new_group3) == 3
189 end
190
191 test "check_media_proxy_whitelist_config/0" do
192 clear_config([:media_proxy, :whitelist], ["https://example.com", "example2.com"])
193
194 assert capture_log(fn ->
195 DeprecationWarnings.check_media_proxy_whitelist_config()
196 end) =~ "Your config is using old format (only domain) for MediaProxy whitelist option"
197 end
198
199 test "check_welcome_message_config/0" do
200 clear_config([:instance, :welcome_user_nickname], "LainChan")
201
202 assert capture_log(fn ->
203 DeprecationWarnings.check_welcome_message_config()
204 end) =~ "Your config is using the old namespace for Welcome messages configuration."
205 end
206
207 test "check_hellthread_threshold/0" do
208 clear_config([:mrf_hellthread, :threshold], 16)
209
210 assert capture_log(fn ->
211 DeprecationWarnings.check_hellthread_threshold()
212 end) =~ "You are using the old configuration mechanism for the hellthread filter."
213 end
214
215 test "check_activity_expiration_config/0" do
216 clear_config([Pleroma.ActivityExpiration], enabled: true)
217
218 assert capture_log(fn ->
219 DeprecationWarnings.check_activity_expiration_config()
220 end) =~ "Your config is using old namespace for activity expiration configuration."
221 end
222
223 test "check_uploders_s3_public_endpoint/0" do
224 clear_config([Pleroma.Uploaders.S3], public_endpoint: "https://fake.amazonaws.com/bucket/")
225
226 assert capture_log(fn ->
227 DeprecationWarnings.check_uploders_s3_public_endpoint()
228 end) =~
229 "Your config is using the old setting for controlling the URL of media uploaded to your S3 bucket."
230 end
231
232 describe "check_gun_pool_options/0" do
233 test "await_up_timeout" do
234 config = Config.get(:connections_pool)
235 clear_config(:connections_pool, Keyword.put(config, :await_up_timeout, 5_000))
236
237 assert capture_log(fn ->
238 DeprecationWarnings.check_gun_pool_options()
239 end) =~
240 "Your config is using old setting `config :pleroma, :connections_pool, await_up_timeout`."
241 end
242
243 test "pool timeout" do
244 old_config = [
245 federation: [
246 size: 50,
247 max_waiting: 10,
248 timeout: 10_000
249 ],
250 media: [
251 size: 50,
252 max_waiting: 10,
253 timeout: 10_000
254 ],
255 upload: [
256 size: 25,
257 max_waiting: 5,
258 timeout: 15_000
259 ],
260 default: [
261 size: 10,
262 max_waiting: 2,
263 timeout: 5_000
264 ]
265 ]
266
267 clear_config(:pools, old_config)
268
269 assert capture_log(fn ->
270 DeprecationWarnings.check_gun_pool_options()
271 end) =~
272 "Your config is using old setting name `timeout` instead of `recv_timeout` in pool settings"
273 end
274 end
275
276 test "check_old_chat_shoutbox/0" do
277 clear_config([:instance, :chat_limit], 1_000)
278 clear_config([:chat, :enabled], true)
279
280 assert capture_log(fn ->
281 DeprecationWarnings.check_old_chat_shoutbox()
282 end) =~
283 "Your config is using the old namespace for the Shoutbox configuration."
284 end
285 end