total rebase
[anni] / test / pleroma / config / deprecation_warnings_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 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 "filter exiftool" do
15     test "gives warning when still used" do
16       clear_config(
17         [Pleroma.Upload, :filters],
18         [Pleroma.Upload.Filter.Exiftool]
19       )
20
21       assert capture_log(fn -> DeprecationWarnings.check_exiftool_filter() end) =~
22                """
23                !!!DEPRECATION WARNING!!!
24                Your config is using Exiftool as a filter instead of Exiftool.StripLocation. This should work for now, but you are advised to change to the new configuration to prevent possible issues later:
25
26                ```
27                config :pleroma, Pleroma.Upload,
28                  filters: [Pleroma.Upload.Filter.Exiftool]
29                ```
30
31                Is now
32
33
34                ```
35                config :pleroma, Pleroma.Upload,
36                  filters: [Pleroma.Upload.Filter.Exiftool.StripLocation]
37                ```
38                """
39     end
40
41     test "changes setting to exiftool strip location" do
42       clear_config(
43         [Pleroma.Upload, :filters],
44         [Pleroma.Upload.Filter.Exiftool, Pleroma.Upload.Filter.Exiftool.ReadDescription]
45       )
46
47       expected_config = [
48         Pleroma.Upload.Filter.Exiftool.StripLocation,
49         Pleroma.Upload.Filter.Exiftool.ReadDescription
50       ]
51
52       capture_log(fn -> DeprecationWarnings.warn() end)
53
54       assert Config.get([Pleroma.Upload]) |> Keyword.get(:filters, []) == expected_config
55     end
56
57     test "doesn't give a warning with correct config" do
58       clear_config(
59         [Pleroma.Upload, :filters],
60         [
61           Pleroma.Upload.Filter.Exiftool.StripLocation,
62           Pleroma.Upload.Filter.Exiftool.ReadDescription
63         ]
64       )
65
66       assert capture_log(fn -> DeprecationWarnings.check_exiftool_filter() end) == ""
67     end
68   end
69
70   describe "simple policy tuples" do
71     test "gives warning when there are still strings" do
72       clear_config([:mrf_simple],
73         media_removal: ["some.removal"],
74         media_nsfw: ["some.nsfw"],
75         federated_timeline_removal: ["some.tl.removal"],
76         report_removal: ["some.report.removal"],
77         reject: ["some.reject"],
78         followers_only: ["some.followers.only"],
79         accept: ["some.accept"],
80         avatar_removal: ["some.avatar.removal"],
81         banner_removal: ["some.banner.removal"],
82         reject_deletes: ["some.reject.deletes"]
83       )
84
85       assert capture_log(fn -> DeprecationWarnings.check_simple_policy_tuples() end) =~
86                """
87                !!!DEPRECATION WARNING!!!
88                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:
89
90                ```
91                config :pleroma, :mrf_simple,
92                  media_removal: ["instance.tld"],
93                  media_nsfw: ["instance.tld"],
94                  federated_timeline_removal: ["instance.tld"],
95                  report_removal: ["instance.tld"],
96                  reject: ["instance.tld"],
97                  followers_only: ["instance.tld"],
98                  accept: ["instance.tld"],
99                  avatar_removal: ["instance.tld"],
100                  banner_removal: ["instance.tld"],
101                  reject_deletes: ["instance.tld"]
102                ```
103
104                Is now
105
106
107                ```
108                config :pleroma, :mrf_simple,
109                  media_removal: [{"instance.tld", "Reason for media removal"}],
110                  media_nsfw: [{"instance.tld", "Reason for media nsfw"}],
111                  federated_timeline_removal: [{"instance.tld", "Reason for federated timeline removal"}],
112                  report_removal: [{"instance.tld", "Reason for report removal"}],
113                  reject: [{"instance.tld", "Reason for reject"}],
114                  followers_only: [{"instance.tld", "Reason for followers only"}],
115                  accept: [{"instance.tld", "Reason for accept"}],
116                  avatar_removal: [{"instance.tld", "Reason for avatar removal"}],
117                  banner_removal: [{"instance.tld", "Reason for banner removal"}],
118                  reject_deletes: [{"instance.tld", "Reason for reject deletes"}]
119                ```
120                """
121     end
122
123     test "transforms config to tuples" do
124       clear_config([:mrf_simple],
125         media_removal: ["some.removal", {"some.other.instance", "Some reason"}]
126       )
127
128       expected_config =
129         {:media_removal, [{"some.removal", ""}, {"some.other.instance", "Some reason"}]}
130
131       capture_log(fn -> DeprecationWarnings.warn() end)
132
133       assert expected_config in Config.get([:mrf_simple])
134     end
135
136     test "doesn't give a warning with correct config" do
137       clear_config([:mrf_simple],
138         media_removal: [{"some.removal", ""}, {"some.other.instance", "Some reason"}]
139       )
140
141       assert capture_log(fn -> DeprecationWarnings.check_simple_policy_tuples() end) == ""
142     end
143   end
144
145   describe "quarantined_instances tuples" do
146     test "gives warning when there are still strings" do
147       clear_config([:instance, :quarantined_instances], [
148         {"domain.com", "some reason"},
149         "somedomain.tld"
150       ])
151
152       assert capture_log(fn -> DeprecationWarnings.check_quarantined_instances_tuples() end) =~
153                """
154                !!!DEPRECATION WARNING!!!
155                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:
156
157                ```
158                config :pleroma, :instance,
159                  quarantined_instances: ["instance.tld"]
160                ```
161
162                Is now
163
164
165                ```
166                config :pleroma, :instance,
167                  quarantined_instances: [{"instance.tld", "Reason for quarantine"}]
168                ```
169                """
170     end
171
172     test "transforms config to tuples" do
173       clear_config([:instance, :quarantined_instances], [
174         {"domain.com", "some reason"},
175         "some.tld"
176       ])
177
178       expected_config = [{"domain.com", "some reason"}, {"some.tld", ""}]
179
180       capture_log(fn -> DeprecationWarnings.warn() end)
181
182       assert Config.get([:instance, :quarantined_instances]) == expected_config
183     end
184
185     test "doesn't give a warning with correct config" do
186       clear_config([:instance, :quarantined_instances], [
187         {"domain.com", "some reason"},
188         {"some.tld", ""}
189       ])
190
191       assert capture_log(fn -> DeprecationWarnings.check_quarantined_instances_tuples() end) == ""
192     end
193   end
194
195   describe "transparency_exclusions tuples" do
196     test "gives warning when there are still strings" do
197       clear_config([:mrf, :transparency_exclusions], [
198         {"domain.com", "some reason"},
199         "somedomain.tld"
200       ])
201
202       assert capture_log(fn -> DeprecationWarnings.check_transparency_exclusions_tuples() end) =~
203                """
204                !!!DEPRECATION WARNING!!!
205                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:
206
207                ```
208                config :pleroma, :mrf,
209                  transparency_exclusions: ["instance.tld"]
210                ```
211
212                Is now
213
214
215                ```
216                config :pleroma, :mrf,
217                  transparency_exclusions: [{"instance.tld", "Reason to exclude transparency"}]
218                ```
219                """
220     end
221
222     test "transforms config to tuples" do
223       clear_config([:mrf, :transparency_exclusions], [
224         {"domain.com", "some reason"},
225         "some.tld"
226       ])
227
228       expected_config = [{"domain.com", "some reason"}, {"some.tld", ""}]
229
230       capture_log(fn -> DeprecationWarnings.warn() end)
231
232       assert Config.get([:mrf, :transparency_exclusions]) == expected_config
233     end
234
235     test "doesn't give a warning with correct config" do
236       clear_config([:mrf, :transparency_exclusions], [
237         {"domain.com", "some reason"},
238         {"some.tld", ""}
239       ])
240
241       assert capture_log(fn -> DeprecationWarnings.check_transparency_exclusions_tuples() end) ==
242                ""
243     end
244   end
245
246   test "check_old_mrf_config/0" do
247     clear_config([:instance, :rewrite_policy], [])
248     clear_config([:instance, :mrf_transparency], true)
249     clear_config([:instance, :mrf_transparency_exclusions], [])
250
251     assert capture_log(fn -> DeprecationWarnings.check_old_mrf_config() end) =~
252              """
253              !!!DEPRECATION WARNING!!!
254              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:
255
256              * `config :pleroma, :instance, rewrite_policy` is now `config :pleroma, :mrf, policies`
257              * `config :pleroma, :instance, mrf_transparency` is now `config :pleroma, :mrf, transparency`
258              * `config :pleroma, :instance, mrf_transparency_exclusions` is now `config :pleroma, :mrf, transparency_exclusions`
259              """
260   end
261
262   test "move_namespace_and_warn/2" do
263     old_group1 = [:group, :key]
264     old_group2 = [:group, :key2]
265     old_group3 = [:group, :key3]
266
267     new_group1 = [:another_group, :key4]
268     new_group2 = [:another_group, :key5]
269     new_group3 = [:another_group, :key6]
270
271     clear_config(old_group1, 1)
272     clear_config(old_group2, 2)
273     clear_config(old_group3, 3)
274
275     clear_config(new_group1)
276     clear_config(new_group2)
277     clear_config(new_group3)
278
279     config_map = [
280       {old_group1, new_group1, "\n error :key"},
281       {old_group2, new_group2, "\n error :key2"},
282       {old_group3, new_group3, "\n error :key3"}
283     ]
284
285     assert capture_log(fn ->
286              DeprecationWarnings.move_namespace_and_warn(
287                config_map,
288                "Warning preface"
289              )
290            end) =~ "Warning preface\n error :key\n error :key2\n error :key3"
291
292     assert Config.get(new_group1) == 1
293     assert Config.get(new_group2) == 2
294     assert Config.get(new_group3) == 3
295   end
296
297   test "check_media_proxy_whitelist_config/0" do
298     clear_config([:media_proxy, :whitelist], ["https://example.com", "example2.com"])
299
300     assert capture_log(fn ->
301              DeprecationWarnings.check_media_proxy_whitelist_config()
302            end) =~ "Your config is using old format (only domain) for MediaProxy whitelist option"
303   end
304
305   test "check_welcome_message_config/0" do
306     clear_config([:instance, :welcome_user_nickname], "LainChan")
307
308     assert capture_log(fn ->
309              DeprecationWarnings.check_welcome_message_config()
310            end) =~ "Your config is using the old namespace for Welcome messages configuration."
311   end
312
313   test "check_hellthread_threshold/0" do
314     clear_config([:mrf_hellthread, :threshold], 16)
315
316     assert capture_log(fn ->
317              DeprecationWarnings.check_hellthread_threshold()
318            end) =~ "You are using the old configuration mechanism for the hellthread filter."
319   end
320
321   test "check_activity_expiration_config/0" do
322     clear_config([Pleroma.ActivityExpiration], enabled: true)
323
324     assert capture_log(fn ->
325              DeprecationWarnings.check_activity_expiration_config()
326            end) =~ "Your config is using old namespace for activity expiration configuration."
327   end
328
329   test "check_uploaders_s3_public_endpoint/0" do
330     clear_config([Pleroma.Uploaders.S3], public_endpoint: "https://fake.amazonaws.com/bucket/")
331
332     assert capture_log(fn ->
333              DeprecationWarnings.check_uploaders_s3_public_endpoint()
334            end) =~
335              "Your config is using the old setting for controlling the URL of media uploaded to your S3 bucket."
336   end
337
338   describe "check_gun_pool_options/0" do
339     test "await_up_timeout" do
340       config = Config.get(:connections_pool)
341       clear_config(:connections_pool, Keyword.put(config, :await_up_timeout, 5_000))
342
343       assert capture_log(fn ->
344                DeprecationWarnings.check_gun_pool_options()
345              end) =~
346                "Your config is using old setting `config :pleroma, :connections_pool, await_up_timeout`."
347     end
348
349     test "pool timeout" do
350       old_config = [
351         federation: [
352           size: 50,
353           max_waiting: 10,
354           timeout: 10_000
355         ],
356         media: [
357           size: 50,
358           max_waiting: 10,
359           timeout: 10_000
360         ],
361         upload: [
362           size: 25,
363           max_waiting: 5,
364           timeout: 15_000
365         ],
366         default: [
367           size: 10,
368           max_waiting: 2,
369           timeout: 5_000
370         ]
371       ]
372
373       clear_config(:pools, old_config)
374
375       assert capture_log(fn ->
376                DeprecationWarnings.check_gun_pool_options()
377              end) =~
378                "Your config is using old setting name `timeout` instead of `recv_timeout` in pool settings"
379     end
380   end
381
382   test "check_old_chat_shoutbox/0" do
383     clear_config([:instance, :chat_limit], 1_000)
384     clear_config([:chat, :enabled], true)
385
386     assert capture_log(fn ->
387              DeprecationWarnings.check_old_chat_shoutbox()
388            end) =~
389              "Your config is using the old namespace for the Shoutbox configuration."
390   end
391 end