Provide pleroma.user mix task for both activate and deactivate
authorMark Felder <feld@feld.me>
Mon, 25 Jan 2021 16:36:51 +0000 (10:36 -0600)
committerMark Felder <feld@feld.me>
Mon, 25 Jan 2021 16:36:51 +0000 (10:36 -0600)
CHANGELOG.md
lib/mix/tasks/pleroma/user.ex
test/mix/tasks/pleroma/user_test.exs

index 66c2357133227bc7e479efa8e0a43080ba74fb51..0ea649111d4be76caf5970ebf8f8815c9f7c9ef5 100644 (file)
@@ -9,7 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 ### Changed
 
 - **Breaking**: Changed `mix pleroma.user toggle_confirmed` to `mix pleroma.user confirm`
-- **Breaking**: Changed `mix pleroma.user toggle_activated` to `mix pleroma.user activate`
+- **Breaking**: Changed `mix pleroma.user toggle_activated` to `mix pleroma.user activate/deactivate`
 - **Breaking**: AdminAPI changed User field `confirmation_pending` to `is_confirmed`
 - **Breaking**: AdminAPI changed User field `approval_pending` to `is_approved`
 - **Breaking**: AdminAPI changed User field `deactivated` to `is_active`
index 1f7eb9375f19e39ab11918de3c974e59216f1f05..bb9a080a4ba91fd8ac3c9497f90967732020b60f 100644 (file)
@@ -141,6 +141,24 @@ defmodule Mix.Tasks.Pleroma.User do
     end
   end
 
+  def run(["activate", nickname]) do
+    start_pleroma()
+
+    with %User{} = user <- User.get_cached_by_nickname(nickname),
+         false <- user.is_active do
+      User.set_activation(user, true)
+      :timer.sleep(500)
+
+      shell_info("Successfully activated #{nickname}")
+    else
+      true ->
+        shell_info("User #{nickname} already activated")
+
+      _ ->
+        shell_error("No user #{nickname}")
+    end
+  end
+
   def run(["deactivate", nickname]) do
     start_pleroma()
 
index fddef1d28a362d2b472d9c644bcd4c0e135da028..768beb0a6ec981ebd2b0aa4da22a110d53094d0e 100644 (file)
@@ -456,6 +456,37 @@ defmodule Mix.Tasks.Pleroma.UserTest do
     end
   end
 
+  describe "running activate" do
+    test "user is activated" do
+      %{id: id, nickname: nickname} = insert(:user, is_active: true)
+
+      assert :ok = Mix.Tasks.Pleroma.User.run(["activate", nickname])
+      assert_received {:mix_shell, :info, [message]}
+      assert message == "User #{nickname} already activated"
+
+      user = Repo.get(User, id)
+      assert user.is_active
+    end
+
+    test "user is not activated" do
+      %{id: id, nickname: nickname} = insert(:user, is_active: false)
+
+      assert :ok = Mix.Tasks.Pleroma.User.run(["activate", nickname])
+      assert_received {:mix_shell, :info, [message]}
+      assert message == "Successfully activated #{nickname}"
+
+      user = Repo.get(User, id)
+      assert user.is_active
+    end
+
+    test "it prints an error message when user is not exist" do
+      Mix.Tasks.Pleroma.User.run(["activate", "foo"])
+
+      assert_received {:mix_shell, :error, [message]}
+      assert message =~ "No user"
+    end
+  end
+
   describe "search" do
     test "it returns users matching" do
       user = insert(:user)