Fix MRF policies to also work with Update
[akkoma] / test / pleroma / web / activity_pub / mrf / ensure_re_prepended_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.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