First
[anni] / test / pleroma / web / activity_pub / mrf / ensure_re_prepended_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.Web.ActivityPub.MRF.EnsureRePrependedTest do
6   use Pleroma.DataCase, async: true
7
8   alias Pleroma.Activity
9   alias Pleroma.Object
10   alias Pleroma.Web.ActivityPub.MRF
11   alias Pleroma.Web.ActivityPub.MRF.EnsureRePrepended
12
13   describe "rewrites summary" do
14     test "it adds `re:` to summary object when child summary and parent summary equal" do
15       message = %{
16         "type" => "Create",
17         "object" => %{
18           "summary" => "object-summary",
19           "inReplyTo" => %Activity{object: %Object{data: %{"summary" => "object-summary"}}}
20         }
21       }
22
23       assert {:ok, res} = EnsureRePrepended.filter(message)
24       assert res["object"]["summary"] == "re: object-summary"
25     end
26
27     test "it adds `re:` to summary object when child summary containts re-subject of parent summary " do
28       message = %{
29         "type" => "Create",
30         "object" => %{
31           "summary" => "object-summary",
32           "inReplyTo" => %Activity{object: %Object{data: %{"summary" => "re: object-summary"}}}
33         }
34       }
35
36       assert {:ok, res} = EnsureRePrepended.filter(message)
37       assert res["object"]["summary"] == "re: object-summary"
38     end
39
40     test "it adds `re:` to history" do
41       message = %{
42         "type" => "Create",
43         "object" => %{
44           "summary" => "object-summary",
45           "inReplyTo" => %Activity{object: %Object{data: %{"summary" => "object-summary"}}},
46           "formerRepresentations" => %{
47             "orderedItems" => [
48               %{
49                 "summary" => "object-summary",
50                 "inReplyTo" => %Activity{object: %Object{data: %{"summary" => "object-summary"}}}
51               }
52             ]
53           }
54         }
55       }
56
57       assert {:ok, res} = MRF.filter_one(EnsureRePrepended, message)
58       assert res["object"]["summary"] == "re: object-summary"
59
60       assert Enum.at(res["object"]["formerRepresentations"]["orderedItems"], 0)["summary"] ==
61                "re: object-summary"
62     end
63
64     test "it accepts Updates" do
65       message = %{
66         "type" => "Update",
67         "object" => %{
68           "summary" => "object-summary",
69           "inReplyTo" => %Activity{object: %Object{data: %{"summary" => "object-summary"}}},
70           "formerRepresentations" => %{
71             "orderedItems" => [
72               %{
73                 "summary" => "object-summary",
74                 "inReplyTo" => %Activity{object: %Object{data: %{"summary" => "object-summary"}}}
75               }
76             ]
77           }
78         }
79       }
80
81       assert {:ok, res} = MRF.filter_one(EnsureRePrepended, message)
82       assert res["object"]["summary"] == "re: object-summary"
83
84       assert Enum.at(res["object"]["formerRepresentations"]["orderedItems"], 0)["summary"] ==
85                "re: object-summary"
86     end
87   end
88
89   describe "skip filter" do
90     test "it skip if type isn't 'Create' or 'Update'" do
91       message = %{
92         "type" => "Annotation",
93         "object" => %{"summary" => "object-summary"}
94       }
95
96       assert {:ok, res} = EnsureRePrepended.filter(message)
97       assert res == message
98     end
99
100     test "it skip if summary is empty" do
101       message = %{
102         "type" => "Create",
103         "object" => %{
104           "inReplyTo" => %Activity{object: %Object{data: %{"summary" => "summary"}}}
105         }
106       }
107
108       assert {:ok, res} = EnsureRePrepended.filter(message)
109       assert res == message
110     end
111
112     test "it skip if inReplyTo is empty" do
113       message = %{"type" => "Create", "object" => %{"summary" => "summary"}}
114       assert {:ok, res} = EnsureRePrepended.filter(message)
115       assert res == message
116     end
117
118     test "it skip if parent and child summary isn't equal" do
119       message = %{
120         "type" => "Create",
121         "object" => %{
122           "summary" => "object-summary",
123           "inReplyTo" => %Activity{object: %Object{data: %{"summary" => "summary"}}}
124         }
125       }
126
127       assert {:ok, res} = EnsureRePrepended.filter(message)
128       assert res == message
129     end
130
131     test "it skips if the object is only a reference" do
132       message = %{
133         "type" => "Create",
134         "object" => "somereference"
135       }
136
137       assert {:ok, res} = EnsureRePrepended.filter(message)
138       assert res == message
139     end
140   end
141 end