Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add command to delete users #456

Merged
merged 1 commit into from
Aug 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ Unreleased

- Dropped support for Python 3.7.

- Added support for deleting users.

1.5.0 - 2023/07/27
==================

Expand Down
14 changes: 13 additions & 1 deletion croud/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
subscriptions_list,
)
from croud.tools.spinner import HALO
from croud.users.commands import users_list
from croud.users.commands import users_delete, users_list
from croud.users.roles.commands import roles_list

# Arguments common to all import-job create commands
Expand Down Expand Up @@ -1090,6 +1090,18 @@
},
},
},
"delete": {
"help": "Delete the specified user. The command is for "
"superusers only.",
"extra_args": [
Argument(
"--user-id", type=str, required=True,
help="The user ID to use.",
),
Argument("-y", "--yes", action="store_true", default=False)
],
"resolver": users_delete,
},
},
},
"api-keys": {
Expand Down
17 changes: 17 additions & 0 deletions croud/users/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from croud.api import Client
from croud.config import get_output_format
from croud.printer import print_response, print_warning
from croud.util import require_confirmation


def transform_roles_list(key):
Expand Down Expand Up @@ -50,3 +51,19 @@ def users_list(args: Namespace) -> None:
"project_roles": transform_roles_list("project_id"),
},
)


@require_confirmation(
"Are you sure you want to delete the user?",
cancel_msg="User deletion cancelled.",
)
def users_delete(args: Namespace) -> None:
client = Client.from_args(args)

data, errors = client.delete(f"/api/v2/users/{args.user_id}/")
print_response(
data=data,
errors=errors,
success_message="User deleted.",
output_fmt=get_output_format(args),
)
16 changes: 15 additions & 1 deletion tests/commands/test_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

from croud.api import Client, RequestMethod
from croud.users.commands import transform_roles_list
from tests.util import assert_rest, call_command
from tests.util import assert_rest, call_command, gen_uuid

pytestmark = pytest.mark.usefixtures("config")

Expand Down Expand Up @@ -90,3 +90,17 @@ def test_transform_roles_list(mock_request):
"project-2: project_member,\n"
"project-3: project_member"
)


@mock.patch.object(Client, "request", return_value=(None, {}))
def test_users_delete(mock_request, capsys):
user_id = gen_uuid()
with mock.patch("builtins.input", side_effect=["Y"]) as mock_input:
call_command("croud", "users", "delete", "--user-id", user_id)
assert_rest(mock_request, RequestMethod.DELETE, f"/api/v2/users/{user_id}/")
mock_input.assert_called_once_with(
"Are you sure you want to delete the user? [yN] "
)

_, err_output = capsys.readouterr()
assert "User deleted." in err_output
Loading