Ensure consistent behavior between pleroma.user activate/deactivate mix tasks

This commit is contained in:
Mark Felder 2021-01-25 10:48:28 -06:00
parent 6e51d7264b
commit f868dcf3ac
2 changed files with 22 additions and 9 deletions

View File

@ -162,17 +162,20 @@ def run(["activate", nickname]) do
def run(["deactivate", nickname]) do def run(["deactivate", nickname]) do
start_pleroma() start_pleroma()
with %User{} = user <- User.get_cached_by_nickname(nickname) do with %User{} = user <- User.get_cached_by_nickname(nickname),
shell_info("Deactivating #{user.nickname}") true <- user.is_active do
User.set_activation(user, false) User.set_activation(user, false)
:timer.sleep(500) :timer.sleep(500)
user = User.get_cached_by_id(user.id) user = User.get_cached_by_id(user.id)
if Enum.empty?(Enum.filter(User.get_friends(user), & &1.local)) do if Enum.empty?(Enum.filter(User.get_friends(user), & &1.local)) do
shell_info("Successfully unsubscribed all local followers from #{user.nickname}") shell_info("Successfully deactivated #{nickname} and unsubscribed all local followers")
end end
else else
false ->
shell_info("User #{nickname} already deactivated")
_ -> _ ->
shell_error("No user #{nickname}") shell_error("No user #{nickname}")
end end

View File

@ -158,7 +158,7 @@ test "no user to delete" do
end end
describe "running deactivate" do describe "running deactivate" do
test "user is unsubscribed" do test "active user is deactivated and unsubscribed" do
followed = insert(:user) followed = insert(:user)
remote_followed = insert(:user, local: false) remote_followed = insert(:user, local: false)
user = insert(:user) user = insert(:user)
@ -168,18 +168,28 @@ test "user is unsubscribed" do
Mix.Tasks.Pleroma.User.run(["deactivate", user.nickname]) Mix.Tasks.Pleroma.User.run(["deactivate", user.nickname])
assert_received {:mix_shell, :info, [message]}
assert message =~ "Deactivating"
# Note that the task has delay :timer.sleep(500) # Note that the task has delay :timer.sleep(500)
assert_received {:mix_shell, :info, [message]} assert_received {:mix_shell, :info, [message]}
assert message =~ "Successfully unsubscribed"
assert message ==
"Successfully deactivated #{user.nickname} and unsubscribed all local followers"
user = User.get_cached_by_nickname(user.nickname) user = User.get_cached_by_nickname(user.nickname)
assert Enum.empty?(Enum.filter(User.get_friends(user), & &1.local)) assert Enum.empty?(Enum.filter(User.get_friends(user), & &1.local))
refute user.is_active refute user.is_active
end end
test "user is deactivated" do
%{id: id, nickname: nickname} = insert(:user, is_active: false)
assert :ok = Mix.Tasks.Pleroma.User.run(["deactivate", nickname])
assert_received {:mix_shell, :info, [message]}
assert message == "User #{nickname} already deactivated"
user = Repo.get(User, id)
refute user.is_active
end
test "no user to deactivate" do test "no user to deactivate" do
Mix.Tasks.Pleroma.User.run(["deactivate", "nonexistent"]) Mix.Tasks.Pleroma.User.run(["deactivate", "nonexistent"])
@ -479,7 +489,7 @@ test "user is not activated" do
assert user.is_active assert user.is_active
end end
test "it prints an error message when user is not exist" do test "no user to activate" do
Mix.Tasks.Pleroma.User.run(["activate", "foo"]) Mix.Tasks.Pleroma.User.run(["activate", "foo"])
assert_received {:mix_shell, :error, [message]} assert_received {:mix_shell, :error, [message]}