Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

302 lines
8.5KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.ModerationLogTest do
  5. alias Pleroma.Activity
  6. alias Pleroma.ModerationLog
  7. use Pleroma.DataCase
  8. import Pleroma.Factory
  9. describe "user moderation" do
  10. setup do
  11. admin = insert(:user, info: %{is_admin: true})
  12. moderator = insert(:user, info: %{is_moderator: true})
  13. subject1 = insert(:user)
  14. subject2 = insert(:user)
  15. [admin: admin, moderator: moderator, subject1: subject1, subject2: subject2]
  16. end
  17. test "logging user deletion by moderator", %{moderator: moderator, subject1: subject1} do
  18. {:ok, _} =
  19. ModerationLog.insert_log(%{
  20. actor: moderator,
  21. subject: subject1,
  22. action: "delete"
  23. })
  24. log = Repo.one(ModerationLog)
  25. assert ModerationLog.get_log_entry_message(log) ==
  26. "@#{moderator.nickname} deleted user @#{subject1.nickname}"
  27. end
  28. test "logging user creation by moderator", %{
  29. moderator: moderator,
  30. subject1: subject1,
  31. subject2: subject2
  32. } do
  33. {:ok, _} =
  34. ModerationLog.insert_log(%{
  35. actor: moderator,
  36. subjects: [subject1, subject2],
  37. action: "create"
  38. })
  39. log = Repo.one(ModerationLog)
  40. assert ModerationLog.get_log_entry_message(log) ==
  41. "@#{moderator.nickname} created users: @#{subject1.nickname}, @#{subject2.nickname}"
  42. end
  43. test "logging user follow by admin", %{admin: admin, subject1: subject1, subject2: subject2} do
  44. {:ok, _} =
  45. ModerationLog.insert_log(%{
  46. actor: admin,
  47. followed: subject1,
  48. follower: subject2,
  49. action: "follow"
  50. })
  51. log = Repo.one(ModerationLog)
  52. assert ModerationLog.get_log_entry_message(log) ==
  53. "@#{admin.nickname} made @#{subject2.nickname} follow @#{subject1.nickname}"
  54. end
  55. test "logging user unfollow by admin", %{admin: admin, subject1: subject1, subject2: subject2} do
  56. {:ok, _} =
  57. ModerationLog.insert_log(%{
  58. actor: admin,
  59. followed: subject1,
  60. follower: subject2,
  61. action: "unfollow"
  62. })
  63. log = Repo.one(ModerationLog)
  64. assert ModerationLog.get_log_entry_message(log) ==
  65. "@#{admin.nickname} made @#{subject2.nickname} unfollow @#{subject1.nickname}"
  66. end
  67. test "logging user tagged by admin", %{admin: admin, subject1: subject1, subject2: subject2} do
  68. {:ok, _} =
  69. ModerationLog.insert_log(%{
  70. actor: admin,
  71. nicknames: [subject1.nickname, subject2.nickname],
  72. tags: ["foo", "bar"],
  73. action: "tag"
  74. })
  75. log = Repo.one(ModerationLog)
  76. users =
  77. [subject1.nickname, subject2.nickname]
  78. |> Enum.map(&"@#{&1}")
  79. |> Enum.join(", ")
  80. tags = ["foo", "bar"] |> Enum.join(", ")
  81. assert ModerationLog.get_log_entry_message(log) ==
  82. "@#{admin.nickname} added tags: #{tags} to users: #{users}"
  83. end
  84. test "logging user untagged by admin", %{admin: admin, subject1: subject1, subject2: subject2} do
  85. {:ok, _} =
  86. ModerationLog.insert_log(%{
  87. actor: admin,
  88. nicknames: [subject1.nickname, subject2.nickname],
  89. tags: ["foo", "bar"],
  90. action: "untag"
  91. })
  92. log = Repo.one(ModerationLog)
  93. users =
  94. [subject1.nickname, subject2.nickname]
  95. |> Enum.map(&"@#{&1}")
  96. |> Enum.join(", ")
  97. tags = ["foo", "bar"] |> Enum.join(", ")
  98. assert ModerationLog.get_log_entry_message(log) ==
  99. "@#{admin.nickname} removed tags: #{tags} from users: #{users}"
  100. end
  101. test "logging user grant by moderator", %{moderator: moderator, subject1: subject1} do
  102. {:ok, _} =
  103. ModerationLog.insert_log(%{
  104. actor: moderator,
  105. subject: subject1,
  106. action: "grant",
  107. permission: "moderator"
  108. })
  109. log = Repo.one(ModerationLog)
  110. assert ModerationLog.get_log_entry_message(log) ==
  111. "@#{moderator.nickname} made @#{subject1.nickname} moderator"
  112. end
  113. test "logging user revoke by moderator", %{moderator: moderator, subject1: subject1} do
  114. {:ok, _} =
  115. ModerationLog.insert_log(%{
  116. actor: moderator,
  117. subject: subject1,
  118. action: "revoke",
  119. permission: "moderator"
  120. })
  121. log = Repo.one(ModerationLog)
  122. assert ModerationLog.get_log_entry_message(log) ==
  123. "@#{moderator.nickname} revoked moderator role from @#{subject1.nickname}"
  124. end
  125. test "logging relay follow", %{moderator: moderator} do
  126. {:ok, _} =
  127. ModerationLog.insert_log(%{
  128. actor: moderator,
  129. action: "relay_follow",
  130. target: "https://example.org/relay"
  131. })
  132. log = Repo.one(ModerationLog)
  133. assert ModerationLog.get_log_entry_message(log) ==
  134. "@#{moderator.nickname} followed relay: https://example.org/relay"
  135. end
  136. test "logging relay unfollow", %{moderator: moderator} do
  137. {:ok, _} =
  138. ModerationLog.insert_log(%{
  139. actor: moderator,
  140. action: "relay_unfollow",
  141. target: "https://example.org/relay"
  142. })
  143. log = Repo.one(ModerationLog)
  144. assert ModerationLog.get_log_entry_message(log) ==
  145. "@#{moderator.nickname} unfollowed relay: https://example.org/relay"
  146. end
  147. test "logging report update", %{moderator: moderator} do
  148. report = %Activity{
  149. id: "9m9I1F4p8ftrTP6QTI",
  150. data: %{
  151. "type" => "Flag",
  152. "state" => "resolved"
  153. }
  154. }
  155. {:ok, _} =
  156. ModerationLog.insert_log(%{
  157. actor: moderator,
  158. action: "report_update",
  159. subject: report
  160. })
  161. log = Repo.one(ModerationLog)
  162. assert ModerationLog.get_log_entry_message(log) ==
  163. "@#{moderator.nickname} updated report ##{report.id} with 'resolved' state"
  164. end
  165. test "logging report response", %{moderator: moderator} do
  166. report = %Activity{
  167. id: "9m9I1F4p8ftrTP6QTI",
  168. data: %{
  169. "type" => "Note"
  170. }
  171. }
  172. {:ok, _} =
  173. ModerationLog.insert_log(%{
  174. actor: moderator,
  175. action: "report_response",
  176. subject: report,
  177. text: "look at this"
  178. })
  179. log = Repo.one(ModerationLog)
  180. assert ModerationLog.get_log_entry_message(log) ==
  181. "@#{moderator.nickname} responded with 'look at this' to report ##{report.id}"
  182. end
  183. test "logging status sensitivity update", %{moderator: moderator} do
  184. note = insert(:note_activity)
  185. {:ok, _} =
  186. ModerationLog.insert_log(%{
  187. actor: moderator,
  188. action: "status_update",
  189. subject: note,
  190. sensitive: "true",
  191. visibility: nil
  192. })
  193. log = Repo.one(ModerationLog)
  194. assert ModerationLog.get_log_entry_message(log) ==
  195. "@#{moderator.nickname} updated status ##{note.id}, set sensitive: 'true'"
  196. end
  197. test "logging status visibility update", %{moderator: moderator} do
  198. note = insert(:note_activity)
  199. {:ok, _} =
  200. ModerationLog.insert_log(%{
  201. actor: moderator,
  202. action: "status_update",
  203. subject: note,
  204. sensitive: nil,
  205. visibility: "private"
  206. })
  207. log = Repo.one(ModerationLog)
  208. assert ModerationLog.get_log_entry_message(log) ==
  209. "@#{moderator.nickname} updated status ##{note.id}, set visibility: 'private'"
  210. end
  211. test "logging status sensitivity & visibility update", %{moderator: moderator} do
  212. note = insert(:note_activity)
  213. {:ok, _} =
  214. ModerationLog.insert_log(%{
  215. actor: moderator,
  216. action: "status_update",
  217. subject: note,
  218. sensitive: "true",
  219. visibility: "private"
  220. })
  221. log = Repo.one(ModerationLog)
  222. assert ModerationLog.get_log_entry_message(log) ==
  223. "@#{moderator.nickname} updated status ##{note.id}, set sensitive: 'true', visibility: 'private'"
  224. end
  225. test "logging status deletion", %{moderator: moderator} do
  226. note = insert(:note_activity)
  227. {:ok, _} =
  228. ModerationLog.insert_log(%{
  229. actor: moderator,
  230. action: "status_delete",
  231. subject_id: note.id
  232. })
  233. log = Repo.one(ModerationLog)
  234. assert ModerationLog.get_log_entry_message(log) ==
  235. "@#{moderator.nickname} deleted status ##{note.id}"
  236. end
  237. end
  238. end