logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

moderation_log_test.exs (8802B)


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