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.

252 lines
6.7KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Mix.Tasks.Pleroma.UserTest do
  5. alias Pleroma.User
  6. use Pleroma.DataCase
  7. import Pleroma.Factory
  8. import ExUnit.CaptureIO
  9. setup_all do
  10. Mix.shell(Mix.Shell.Process)
  11. on_exit(fn ->
  12. Mix.shell(Mix.Shell.IO)
  13. end)
  14. :ok
  15. end
  16. describe "running new" do
  17. test "user is created" do
  18. # just get random data
  19. unsaved = build(:user)
  20. # prepare to answer yes
  21. send(self(), {:mix_shell_input, :yes?, true})
  22. Mix.Tasks.Pleroma.User.run([
  23. "new",
  24. unsaved.nickname,
  25. unsaved.email,
  26. "--name",
  27. unsaved.name,
  28. "--bio",
  29. unsaved.bio,
  30. "--password",
  31. "test",
  32. "--moderator",
  33. "--admin"
  34. ])
  35. assert_received {:mix_shell, :info, [message]}
  36. assert message =~ "user will be created"
  37. assert_received {:mix_shell, :yes?, [message]}
  38. assert message =~ "Continue"
  39. assert_received {:mix_shell, :info, [message]}
  40. assert message =~ "created"
  41. user = User.get_by_nickname(unsaved.nickname)
  42. assert user.name == unsaved.name
  43. assert user.email == unsaved.email
  44. assert user.bio == unsaved.bio
  45. assert user.info.is_moderator
  46. assert user.info.is_admin
  47. end
  48. test "user is not created" do
  49. unsaved = build(:user)
  50. # prepare to answer no
  51. send(self(), {:mix_shell_input, :yes?, false})
  52. Mix.Tasks.Pleroma.User.run(["new", unsaved.nickname, unsaved.email])
  53. assert_received {:mix_shell, :info, [message]}
  54. assert message =~ "user will be created"
  55. assert_received {:mix_shell, :yes?, [message]}
  56. assert message =~ "Continue"
  57. assert_received {:mix_shell, :info, [message]}
  58. assert message =~ "will not be created"
  59. refute User.get_by_nickname(unsaved.nickname)
  60. end
  61. end
  62. describe "running rm" do
  63. test "user is deleted" do
  64. user = insert(:user)
  65. Mix.Tasks.Pleroma.User.run(["rm", user.nickname])
  66. assert_received {:mix_shell, :info, [message]}
  67. assert message =~ " deleted"
  68. user = User.get_by_nickname(user.nickname)
  69. assert user.info.deactivated
  70. end
  71. test "no user to delete" do
  72. Mix.Tasks.Pleroma.User.run(["rm", "nonexistent"])
  73. assert_received {:mix_shell, :error, [message]}
  74. assert message =~ "No local user"
  75. end
  76. end
  77. describe "running toggle_activated" do
  78. test "user is deactivated" do
  79. user = insert(:user)
  80. Mix.Tasks.Pleroma.User.run(["toggle_activated", user.nickname])
  81. assert_received {:mix_shell, :info, [message]}
  82. assert message =~ " deactivated"
  83. user = User.get_by_nickname(user.nickname)
  84. assert user.info.deactivated
  85. end
  86. test "user is activated" do
  87. user = insert(:user, info: %{deactivated: true})
  88. Mix.Tasks.Pleroma.User.run(["toggle_activated", user.nickname])
  89. assert_received {:mix_shell, :info, [message]}
  90. assert message =~ " activated"
  91. user = User.get_by_nickname(user.nickname)
  92. refute user.info.deactivated
  93. end
  94. test "no user to toggle" do
  95. Mix.Tasks.Pleroma.User.run(["toggle_activated", "nonexistent"])
  96. assert_received {:mix_shell, :error, [message]}
  97. assert message =~ "No user"
  98. end
  99. end
  100. describe "running unsubscribe" do
  101. test "user is unsubscribed" do
  102. followed = insert(:user)
  103. user = insert(:user, %{following: [User.ap_followers(followed)]})
  104. Mix.Tasks.Pleroma.User.run(["unsubscribe", user.nickname])
  105. assert_received {:mix_shell, :info, [message]}
  106. assert message =~ "Deactivating"
  107. assert_received {:mix_shell, :info, [message]}
  108. assert message =~ "Unsubscribing"
  109. # Note that the task has delay :timer.sleep(500)
  110. assert_received {:mix_shell, :info, [message]}
  111. assert message =~ "Successfully unsubscribed"
  112. user = User.get_by_nickname(user.nickname)
  113. assert Enum.empty?(user.following)
  114. assert user.info.deactivated
  115. end
  116. test "no user to unsubscribe" do
  117. Mix.Tasks.Pleroma.User.run(["unsubscribe", "nonexistent"])
  118. assert_received {:mix_shell, :error, [message]}
  119. assert message =~ "No user"
  120. end
  121. end
  122. describe "running set" do
  123. test "All statuses set" do
  124. user = insert(:user)
  125. Mix.Tasks.Pleroma.User.run(["set", user.nickname, "--moderator", "--admin", "--locked"])
  126. assert_received {:mix_shell, :info, [message]}
  127. assert message =~ ~r/Moderator status .* true/
  128. assert_received {:mix_shell, :info, [message]}
  129. assert message =~ ~r/Locked status .* true/
  130. assert_received {:mix_shell, :info, [message]}
  131. assert message =~ ~r/Admin status .* true/
  132. user = User.get_by_nickname(user.nickname)
  133. assert user.info.is_moderator
  134. assert user.info.locked
  135. assert user.info.is_admin
  136. end
  137. test "All statuses unset" do
  138. user = insert(:user, info: %{is_moderator: true, locked: true, is_admin: true})
  139. Mix.Tasks.Pleroma.User.run([
  140. "set",
  141. user.nickname,
  142. "--no-moderator",
  143. "--no-admin",
  144. "--no-locked"
  145. ])
  146. assert_received {:mix_shell, :info, [message]}
  147. assert message =~ ~r/Moderator status .* false/
  148. assert_received {:mix_shell, :info, [message]}
  149. assert message =~ ~r/Locked status .* false/
  150. assert_received {:mix_shell, :info, [message]}
  151. assert message =~ ~r/Admin status .* false/
  152. user = User.get_by_nickname(user.nickname)
  153. refute user.info.is_moderator
  154. refute user.info.locked
  155. refute user.info.is_admin
  156. end
  157. test "no user to set status" do
  158. Mix.Tasks.Pleroma.User.run(["set", "nonexistent", "--moderator"])
  159. assert_received {:mix_shell, :error, [message]}
  160. assert message =~ "No local user"
  161. end
  162. end
  163. describe "running reset_password" do
  164. test "password reset token is generated" do
  165. user = insert(:user)
  166. assert capture_io(fn ->
  167. Mix.Tasks.Pleroma.User.run(["reset_password", user.nickname])
  168. end) =~ "URL:"
  169. assert_received {:mix_shell, :info, [message]}
  170. assert message =~ "Generated"
  171. end
  172. test "no user to reset password" do
  173. Mix.Tasks.Pleroma.User.run(["reset_password", "nonexistent"])
  174. assert_received {:mix_shell, :error, [message]}
  175. assert message =~ "No local user"
  176. end
  177. end
  178. describe "running invite" do
  179. test "invite token is generated" do
  180. assert capture_io(fn ->
  181. Mix.Tasks.Pleroma.User.run(["invite"])
  182. end) =~ "http"
  183. assert_received {:mix_shell, :info, [message]}
  184. assert message =~ "Generated"
  185. end
  186. end
  187. end