Merge branch 'refactoring/fix_render_view' into 'develop'
[akkoma] / test / web / rich_media / helpers_test.exs
1 defmodule Pleroma.Web.RichMedia.HelpersTest do
2 use Pleroma.DataCase
3
4 alias Pleroma.Config
5 alias Pleroma.Object
6 alias Pleroma.Web.CommonAPI
7 alias Pleroma.Web.RichMedia.Helpers
8
9 import Pleroma.Factory
10 import Tesla.Mock
11
12 setup do
13 mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
14 rich_media = Config.get([:rich_media, :enabled])
15 on_exit(fn -> Config.put([:rich_media, :enabled], rich_media) end)
16
17 :ok
18 end
19
20 test "refuses to crawl incomplete URLs" do
21 user = insert(:user)
22
23 {:ok, activity} =
24 CommonAPI.post(user, %{
25 "status" => "[test](example.com/ogp)",
26 "content_type" => "text/markdown"
27 })
28
29 Config.put([:rich_media, :enabled], true)
30
31 assert %{} == Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)
32 end
33
34 test "refuses to crawl malformed URLs" do
35 user = insert(:user)
36
37 {:ok, activity} =
38 CommonAPI.post(user, %{
39 "status" => "[test](example.com[]/ogp)",
40 "content_type" => "text/markdown"
41 })
42
43 Config.put([:rich_media, :enabled], true)
44
45 assert %{} == Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)
46 end
47
48 test "crawls valid, complete URLs" do
49 user = insert(:user)
50
51 {:ok, activity} =
52 CommonAPI.post(user, %{
53 "status" => "[test](https://example.com/ogp)",
54 "content_type" => "text/markdown"
55 })
56
57 Config.put([:rich_media, :enabled], true)
58
59 assert %{page_url: "https://example.com/ogp", rich_media: _} =
60 Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)
61 end
62
63 test "refuses to crawl URLs from posts marked sensitive" do
64 user = insert(:user)
65
66 {:ok, activity} =
67 CommonAPI.post(user, %{
68 "status" => "http://example.com/ogp",
69 "sensitive" => true
70 })
71
72 %Object{} = object = Object.normalize(activity)
73
74 assert object.data["sensitive"]
75
76 Config.put([:rich_media, :enabled], true)
77
78 assert %{} = Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)
79 end
80
81 test "refuses to crawl URLs from posts tagged NSFW" do
82 user = insert(:user)
83
84 {:ok, activity} =
85 CommonAPI.post(user, %{
86 "status" => "http://example.com/ogp #nsfw"
87 })
88
89 %Object{} = object = Object.normalize(activity)
90
91 assert object.data["sensitive"]
92
93 Config.put([:rich_media, :enabled], true)
94
95 assert %{} = Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)
96 end
97
98 test "refuses to crawl URLs of private network from posts" do
99 user = insert(:user)
100
101 {:ok, activity} =
102 CommonAPI.post(user, %{"status" => "http://127.0.0.1:4000/notice/9kCP7VNyPJXFOXDrgO"})
103
104 {:ok, activity2} = CommonAPI.post(user, %{"status" => "https://10.111.10.1/notice/9kCP7V"})
105 {:ok, activity3} = CommonAPI.post(user, %{"status" => "https://172.16.32.40/notice/9kCP7V"})
106 {:ok, activity4} = CommonAPI.post(user, %{"status" => "https://192.168.10.40/notice/9kCP7V"})
107 {:ok, activity5} = CommonAPI.post(user, %{"status" => "https://pleroma.local/notice/9kCP7V"})
108
109 Config.put([:rich_media, :enabled], true)
110
111 assert %{} = Helpers.fetch_data_for_activity(activity)
112 assert %{} = Helpers.fetch_data_for_activity(activity2)
113 assert %{} = Helpers.fetch_data_for_activity(activity3)
114 assert %{} = Helpers.fetch_data_for_activity(activity4)
115 assert %{} = Helpers.fetch_data_for_activity(activity5)
116 end
117 end