1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.ModerationLogTest do
7 alias Pleroma.ModerationLog
11 import Pleroma.Factory
13 describe "user moderation" do
15 admin = insert(:user, info: %{is_admin: true})
16 moderator = insert(:user, info: %{is_moderator: true})
17 subject1 = insert(:user)
18 subject2 = insert(:user)
20 [admin: admin, moderator: moderator, subject1: subject1, subject2: subject2]
23 test "logging user deletion by moderator", %{moderator: moderator, subject1: subject1} do
25 ModerationLog.insert_log(%{
31 log = Repo.one(ModerationLog)
33 assert ModerationLog.get_log_entry_message(log) ==
34 "@#{moderator.nickname} deleted user @#{subject1.nickname}"
37 test "logging user creation by moderator", %{
43 ModerationLog.insert_log(%{
45 subjects: [subject1, subject2],
49 log = Repo.one(ModerationLog)
51 assert ModerationLog.get_log_entry_message(log) ==
52 "@#{moderator.nickname} created users: @#{subject1.nickname}, @#{subject2.nickname}"
55 test "logging user follow by admin", %{admin: admin, subject1: subject1, subject2: subject2} do
57 ModerationLog.insert_log(%{
64 log = Repo.one(ModerationLog)
66 assert ModerationLog.get_log_entry_message(log) ==
67 "@#{admin.nickname} made @#{subject2.nickname} follow @#{subject1.nickname}"
70 test "logging user unfollow by admin", %{admin: admin, subject1: subject1, subject2: subject2} do
72 ModerationLog.insert_log(%{
79 log = Repo.one(ModerationLog)
81 assert ModerationLog.get_log_entry_message(log) ==
82 "@#{admin.nickname} made @#{subject2.nickname} unfollow @#{subject1.nickname}"
85 test "logging user tagged by admin", %{admin: admin, subject1: subject1, subject2: subject2} do
87 ModerationLog.insert_log(%{
89 nicknames: [subject1.nickname, subject2.nickname],
94 log = Repo.one(ModerationLog)
97 [subject1.nickname, subject2.nickname]
98 |> Enum.map(&"@#{&1}")
101 tags = ["foo", "bar"] |> Enum.join(", ")
103 assert ModerationLog.get_log_entry_message(log) ==
104 "@#{admin.nickname} added tags: #{tags} to users: #{users}"
107 test "logging user untagged by admin", %{admin: admin, subject1: subject1, subject2: subject2} do
109 ModerationLog.insert_log(%{
111 nicknames: [subject1.nickname, subject2.nickname],
112 tags: ["foo", "bar"],
116 log = Repo.one(ModerationLog)
119 [subject1.nickname, subject2.nickname]
120 |> Enum.map(&"@#{&1}")
123 tags = ["foo", "bar"] |> Enum.join(", ")
125 assert ModerationLog.get_log_entry_message(log) ==
126 "@#{admin.nickname} removed tags: #{tags} from users: #{users}"
129 test "logging user grant by moderator", %{moderator: moderator, subject1: subject1} do
131 ModerationLog.insert_log(%{
135 permission: "moderator"
138 log = Repo.one(ModerationLog)
140 assert ModerationLog.get_log_entry_message(log) ==
141 "@#{moderator.nickname} made @#{subject1.nickname} moderator"
144 test "logging user revoke by moderator", %{moderator: moderator, subject1: subject1} do
146 ModerationLog.insert_log(%{
150 permission: "moderator"
153 log = Repo.one(ModerationLog)
155 assert ModerationLog.get_log_entry_message(log) ==
156 "@#{moderator.nickname} revoked moderator role from @#{subject1.nickname}"
159 test "logging relay follow", %{moderator: moderator} do
161 ModerationLog.insert_log(%{
163 action: "relay_follow",
164 target: "https://example.org/relay"
167 log = Repo.one(ModerationLog)
169 assert ModerationLog.get_log_entry_message(log) ==
170 "@#{moderator.nickname} followed relay: https://example.org/relay"
173 test "logging relay unfollow", %{moderator: moderator} do
175 ModerationLog.insert_log(%{
177 action: "relay_unfollow",
178 target: "https://example.org/relay"
181 log = Repo.one(ModerationLog)
183 assert ModerationLog.get_log_entry_message(log) ==
184 "@#{moderator.nickname} unfollowed relay: https://example.org/relay"
187 test "logging report update", %{moderator: moderator} do
189 id: "9m9I1F4p8ftrTP6QTI",
192 "state" => "resolved"
197 ModerationLog.insert_log(%{
199 action: "report_update",
203 log = Repo.one(ModerationLog)
205 assert ModerationLog.get_log_entry_message(log) ==
206 "@#{moderator.nickname} updated report ##{report.id} with 'resolved' state"
209 test "logging report response", %{moderator: moderator} do
211 id: "9m9I1F4p8ftrTP6QTI",
218 ModerationLog.insert_log(%{
220 action: "report_response",
225 log = Repo.one(ModerationLog)
227 assert ModerationLog.get_log_entry_message(log) ==
228 "@#{moderator.nickname} responded with 'look at this' to report ##{report.id}"
231 test "logging status sensitivity update", %{moderator: moderator} do
232 note = insert(:note_activity)
235 ModerationLog.insert_log(%{
237 action: "status_update",
243 log = Repo.one(ModerationLog)
245 assert ModerationLog.get_log_entry_message(log) ==
246 "@#{moderator.nickname} updated status ##{note.id}, set sensitive: 'true'"
249 test "logging status visibility update", %{moderator: moderator} do
250 note = insert(:note_activity)
253 ModerationLog.insert_log(%{
255 action: "status_update",
258 visibility: "private"
261 log = Repo.one(ModerationLog)
263 assert ModerationLog.get_log_entry_message(log) ==
264 "@#{moderator.nickname} updated status ##{note.id}, set visibility: 'private'"
267 test "logging status sensitivity & visibility update", %{moderator: moderator} do
268 note = insert(:note_activity)
271 ModerationLog.insert_log(%{
273 action: "status_update",
276 visibility: "private"
279 log = Repo.one(ModerationLog)
281 assert ModerationLog.get_log_entry_message(log) ==
282 "@#{moderator.nickname} updated status ##{note.id}, set sensitive: 'true', visibility: 'private'"
285 test "logging status deletion", %{moderator: moderator} do
286 note = insert(:note_activity)
289 ModerationLog.insert_log(%{
291 action: "status_delete",
295 log = Repo.one(ModerationLog)
297 assert ModerationLog.get_log_entry_message(log) ==
298 "@#{moderator.nickname} deleted status ##{note.id}"