Deprecate transparency_exclusions
[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 describe "transparency_exclusions tuples" do
141 test "gives warning when there are still strings" do
142 clear_config([:mrf, :transparency_exclusions], [
143 {"domain.com", "some reason"},
144 "somedomain.tld"
145 ])
146
147 assert capture_log(fn -> DeprecationWarnings.check_transparency_exclusions_tuples() end) =~
148 """
149 !!!DEPRECATION WARNING!!!
150 Your config is using strings in the transparency_exclusions configuration instead of tuples. They should work for now, but you are advised to change to the new configuration to prevent possible issues later:
151
152 ```
153 config :pleroma, :mrf,
154 transparency_exclusions: ["instance.tld"]
155 ```
156
157 Is now
158
159
160 ```
161 config :pleroma, :mrf,
162 transparency_exclusions: [{"instance.tld", "Reason to exlude transparency"}]
163 ```
164 """
165 end
166
167 test "transforms config to tuples" do
168 clear_config([:mrf, :transparency_exclusions], [
169 {"domain.com", "some reason"},
170 "some.tld"
171 ])
172
173 expected_config = [{"domain.com", "some reason"}, {"some.tld", ""}]
174
175 capture_log(fn -> DeprecationWarnings.check_transparency_exclusions_tuples() end)
176
177 assert Config.get([:mrf, :transparency_exclusions]) == expected_config
178 end
179
180 test "doesn't give a warning with correct config" do
181 clear_config([:mrf, :transparency_exclusions], [
182 {"domain.com", "some reason"},
183 {"some.tld", ""}
184 ])
185
186 assert capture_log(fn -> DeprecationWarnings.check_transparency_exclusions_tuples() end) == ""
187 end
188 end
189
190 test "check_old_mrf_config/0" do
191 clear_config([:instance, :rewrite_policy], [])
192 clear_config([:instance, :mrf_transparency], true)
193 clear_config([:instance, :mrf_transparency_exclusions], [])
194
195 assert capture_log(fn -> DeprecationWarnings.check_old_mrf_config() end) =~
196 """
197 !!!DEPRECATION WARNING!!!
198 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:
199
200 * `config :pleroma, :instance, rewrite_policy` is now `config :pleroma, :mrf, policies`
201 * `config :pleroma, :instance, mrf_transparency` is now `config :pleroma, :mrf, transparency`
202 * `config :pleroma, :instance, mrf_transparency_exclusions` is now `config :pleroma, :mrf, transparency_exclusions`
203 """
204 end
205
206 test "move_namespace_and_warn/2" do
207 old_group1 = [:group, :key]
208 old_group2 = [:group, :key2]
209 old_group3 = [:group, :key3]
210
211 new_group1 = [:another_group, :key4]
212 new_group2 = [:another_group, :key5]
213 new_group3 = [:another_group, :key6]
214
215 clear_config(old_group1, 1)
216 clear_config(old_group2, 2)
217 clear_config(old_group3, 3)
218
219 clear_config(new_group1)
220 clear_config(new_group2)
221 clear_config(new_group3)
222
223 config_map = [
224 {old_group1, new_group1, "\n error :key"},
225 {old_group2, new_group2, "\n error :key2"},
226 {old_group3, new_group3, "\n error :key3"}
227 ]
228
229 assert capture_log(fn ->
230 DeprecationWarnings.move_namespace_and_warn(
231 config_map,
232 "Warning preface"
233 )
234 end) =~ "Warning preface\n error :key\n error :key2\n error :key3"
235
236 assert Config.get(new_group1) == 1
237 assert Config.get(new_group2) == 2
238 assert Config.get(new_group3) == 3
239 end
240
241 test "check_media_proxy_whitelist_config/0" do
242 clear_config([:media_proxy, :whitelist], ["https://example.com", "example2.com"])
243
244 assert capture_log(fn ->
245 DeprecationWarnings.check_media_proxy_whitelist_config()
246 end) =~ "Your config is using old format (only domain) for MediaProxy whitelist option"
247 end
248
249 test "check_welcome_message_config/0" do
250 clear_config([:instance, :welcome_user_nickname], "LainChan")
251
252 assert capture_log(fn ->
253 DeprecationWarnings.check_welcome_message_config()
254 end) =~ "Your config is using the old namespace for Welcome messages configuration."
255 end
256
257 test "check_hellthread_threshold/0" do
258 clear_config([:mrf_hellthread, :threshold], 16)
259
260 assert capture_log(fn ->
261 DeprecationWarnings.check_hellthread_threshold()
262 end) =~ "You are using the old configuration mechanism for the hellthread filter."
263 end
264
265 test "check_activity_expiration_config/0" do
266 clear_config([Pleroma.ActivityExpiration], enabled: true)
267
268 assert capture_log(fn ->
269 DeprecationWarnings.check_activity_expiration_config()
270 end) =~ "Your config is using old namespace for activity expiration configuration."
271 end
272
273 test "check_uploders_s3_public_endpoint/0" do
274 clear_config([Pleroma.Uploaders.S3], public_endpoint: "https://fake.amazonaws.com/bucket/")
275
276 assert capture_log(fn ->
277 DeprecationWarnings.check_uploders_s3_public_endpoint()
278 end) =~
279 "Your config is using the old setting for controlling the URL of media uploaded to your S3 bucket."
280 end
281
282 describe "check_gun_pool_options/0" do
283 test "await_up_timeout" do
284 config = Config.get(:connections_pool)
285 clear_config(:connections_pool, Keyword.put(config, :await_up_timeout, 5_000))
286
287 assert capture_log(fn ->
288 DeprecationWarnings.check_gun_pool_options()
289 end) =~
290 "Your config is using old setting `config :pleroma, :connections_pool, await_up_timeout`."
291 end
292
293 test "pool timeout" do
294 old_config = [
295 federation: [
296 size: 50,
297 max_waiting: 10,
298 timeout: 10_000
299 ],
300 media: [
301 size: 50,
302 max_waiting: 10,
303 timeout: 10_000
304 ],
305 upload: [
306 size: 25,
307 max_waiting: 5,
308 timeout: 15_000
309 ],
310 default: [
311 size: 10,
312 max_waiting: 2,
313 timeout: 5_000
314 ]
315 ]
316
317 clear_config(:pools, old_config)
318
319 assert capture_log(fn ->
320 DeprecationWarnings.check_gun_pool_options()
321 end) =~
322 "Your config is using old setting name `timeout` instead of `recv_timeout` in pool settings"
323 end
324 end
325
326 test "check_old_chat_shoutbox/0" do
327 clear_config([:instance, :chat_limit], 1_000)
328 clear_config([:chat, :enabled], true)
329
330 assert capture_log(fn ->
331 DeprecationWarnings.check_old_chat_shoutbox()
332 end) =~
333 "Your config is using the old namespace for the Shoutbox configuration."
334 end
335 end