From 61b8228b7b3e3b0878960eb5c9ede2d0ae59a2e7 Mon Sep 17 00:00:00 2001 From: Hamza442 Date: Wed, 18 Jan 2023 11:15:29 +0500 Subject: [PATCH] chore: add new tests for retire_user management command --- .../management/commands/retire_user.py | 18 +++++++--- .../management/tests/test_retire_user.py | 33 ++++++++++++++++++- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/openedx/core/djangoapps/user_api/management/commands/retire_user.py b/openedx/core/djangoapps/user_api/management/commands/retire_user.py index 770812307b..7943870617 100644 --- a/openedx/core/djangoapps/user_api/management/commands/retire_user.py +++ b/openedx/core/djangoapps/user_api/management/commands/retire_user.py @@ -60,7 +60,9 @@ class Command(BaseCommand): """ unknown_users = [] users = [] - if userfile: + user = user_name + email = useremail + if userfile and (not user and not email): try: userinfo = open(userfile, 'r') except Exception as exc: @@ -76,13 +78,19 @@ class Command(BaseCommand): users.append(User.objects.get(username=username, email=user_email)) except user_model.DoesNotExist: unknown_users.append({username: user_email}) - elif user_name and useremail: + elif (user and email) and not userfile: try: - users.append(User.objects.get(username=username, email=user_email)) + users.append(User.objects.get(username=user, email=email)) except user_model.DoesNotExist: - unknown_users.append({username: useremail}) + unknown_users.append({user: email}) + elif userfile and user and email: + error_message = ( + 'You cannot use userfile option with username and user_email option. ' + 'Use only userfile option or use just username and user_email option' + ) + raise CommandError(error_message) else: - raise CommandError("Please provide user_file or username and user_email parameter when runing command") + raise CommandError("Please provide user_file or username and user_email parameter when running command") return users, unknown_users def handle(self, *args, **options): diff --git a/openedx/core/djangoapps/user_api/management/tests/test_retire_user.py b/openedx/core/djangoapps/user_api/management/tests/test_retire_user.py index 2483431f87..c3922f8e0a 100644 --- a/openedx/core/djangoapps/user_api/management/tests/test_retire_user.py +++ b/openedx/core/djangoapps/user_api/management/tests/test_retire_user.py @@ -59,7 +59,7 @@ def remove_user_file(): @skip_unless_lms -def test_successful_retire(setup_retirement_states): # lint-amnesty, pylint: disable=redefined-outer-name, unused-argument +def test_successful_retire_with_userfile(setup_retirement_states): # lint-amnesty, pylint: disable=redefined-outer-name, unused-argument user = UserFactory.create(username='user0', email="user0@example.com") username = user.username user_email = user.email @@ -80,3 +80,34 @@ def test_retire_user_with_usename_email_mismatch(setup_retirement_states): # li with pytest.raises(CommandError, match=r'Could not find users with specified username and email '): call_command('retire_user', user_file=user_file) remove_user_file() + + +@skip_unless_lms +def test_retire_user_without_usename_email_userfile(setup_retirement_states): # lint-amnesty, pylint: disable=redefined-outer-name, unused-argument + with pytest.raises(CommandError, match=r'Please provide user_file or username and user_email '): + call_command('retire_user') + + +@skip_unless_lms +def test_successful_retire_with_username_email(setup_retirement_states): # lint-amnesty, pylint: disable=redefined-outer-name, unused-argument + user = UserFactory.create(username='user0', email="user0@example.com") + username = user.username + user_email = user.email + call_command('retire_user', username=username, user_email=user_email) + user = User.objects.get(username=username) + retired_user_status = UserRetirementStatus.objects.all()[0] + assert retired_user_status.original_username == username + assert retired_user_status.original_email == user_email + # Make sure that we have changed the email address linked to the original user + assert user.email != user_email + + +@skip_unless_lms +def test_retire_with_username_email_userfile(setup_retirement_states): # lint-amnesty, pylint: disable=redefined-outer-name, unused-argument + user = UserFactory.create(username='user0', email="user0@example.com") + username = user.username + user_email = user.email + create_user_file(True) + with pytest.raises(CommandError, match=r'You cannot use userfile option with username and user_email'): + call_command('retire_user', user_file=user_file, username=username, user_email=user_email) + remove_user_file()