Merge pull request #488 from SamR1/fix-cli-user-creation

CLI - fix user creation when user already exists with same email
This commit is contained in:
Sam 2024-02-04 09:59:48 +01:00 committed by GitHub
commit 0726aeb748
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 228 additions and 1 deletions

View File

@ -0,0 +1,227 @@
import secrets
from unittest.mock import patch
from click.testing import CliRunner
from flask import Flask
from fittrackee.cli import users_cli
from fittrackee.users.models import User
from ..utils import random_email, random_string
class TestCliUserCreate:
def test_it_displays_error_when_user_exists_with_same_username(
self, app: Flask, user_1: User
) -> None:
runner = CliRunner()
result = runner.invoke(
users_cli,
[
"create",
user_1.username,
"--email",
random_email(),
"--password",
random_string(),
],
)
assert (
result.output
== 'Error(s) occurred:\nsorry, that username is already taken\n'
)
def test_it_displays_error_when_user_exists_with_same_email(
self, app: Flask, user_1: User
) -> None:
runner = CliRunner()
result = runner.invoke(
users_cli,
[
"create",
random_string(),
"--email",
user_1.email,
"--password",
random_string(),
],
)
assert result.output == (
'Error(s) occurred:\n'
'This user already exists. No action done.\n'
)
def test_it_displays_success_message_when_user_is_created(
self,
app: Flask,
) -> None:
username = random_string()
runner = CliRunner()
result = runner.invoke(
users_cli,
[
"create",
username,
"--email",
random_email(),
"--password",
random_string(),
],
)
assert result.output == f"User '{username}' created.\n"
def test_it_displays_password_when_password_is_not_provided(
self,
app: Flask,
) -> None:
username = random_string()
password = random_string()
runner = CliRunner()
with patch.object(secrets, 'token_urlsafe', return_value=password):
result = runner.invoke(
users_cli,
["create", username, "--email", random_email()],
)
assert result.output == (
f"User '{username}' created.\n"
f"The user password is: {password}\n"
)
class TestCliUserUpdate:
def test_it_displays_error_when_user_does_not_exist(
self, app: Flask
) -> None:
username = random_string()
runner = CliRunner()
result = runner.invoke(
users_cli,
["update", username],
)
assert result.output == (
f"User '{username}' not found.\n"
f"Check the provided user name (case sensitive).\n"
)
def test_it_displays_no_updates_when_no_option_provided(
self, app: Flask, user_1: User
) -> None:
runner = CliRunner()
result = runner.invoke(
users_cli,
["update", user_1.username],
)
assert result.output == 'No updates.\n'
def test_it_displays_error_updated_when_user_not_found(
self, app: Flask, user_1: User
) -> None:
runner = CliRunner()
result = runner.invoke(
users_cli,
["update", user_1.username.upper(), '--set-admin', "true"],
)
assert result.output == (
f"User '{user_1.username.upper()}' not found.\n"
f"Check the provided user name (case sensitive).\n"
)
def test_it_displays_user_updated_when_setting_admin_rights(
self, app: Flask, user_1: User
) -> None:
runner = CliRunner()
result = runner.invoke(
users_cli,
["update", user_1.username, '--set-admin', "true"],
)
assert result.output == f"User '{user_1.username}' updated.\n"
def test_it_displays_user_updated_when_removing_admin_rights(
self, app: Flask, user_1_admin: User
) -> None:
runner = CliRunner()
result = runner.invoke(
users_cli,
["update", user_1_admin.username, '--set-admin', "false"],
)
assert result.output == f"User '{user_1_admin.username}' updated.\n"
def test_it_displays_user_updated_when_activating_user(
self, app: Flask, inactive_user: User
) -> None:
runner = CliRunner()
result = runner.invoke(
users_cli,
["update", inactive_user.username, '--activate'],
)
assert result.output == f"User '{inactive_user.username}' updated.\n"
def test_it_displays_password_when_resetting_password(
self, app: Flask, user_1: User
) -> None:
password = random_string()
runner = CliRunner()
with patch.object(secrets, 'token_urlsafe', return_value=password):
result = runner.invoke(
users_cli,
["update", user_1.username, '--reset-password'],
)
assert result.output == (
f"User '{user_1.username}' updated.\n"
f"The new password is: {password}\n"
)
def test_it_displays_user_updated_when_updating_email(
self, app: Flask, inactive_user: User
) -> None:
new_email = random_email()
runner = CliRunner()
result = runner.invoke(
users_cli,
["update", inactive_user.username, '--update-email', new_email],
)
assert result.output == f"User '{inactive_user.username}' updated.\n"
def test_it_displays_error_when_email_is_invalid(
self, app: Flask, inactive_user: User
) -> None:
runner = CliRunner()
result = runner.invoke(
users_cli,
[
"update",
inactive_user.username,
'--update-email',
random_string(),
],
)
assert (
result.output
== "An error occurred: valid email must be provided\n"
)

View File

@ -40,7 +40,7 @@ def create_user(username: str, email: str, password: Optional[str]) -> None:
try: try:
user_manager_service = UserManagerService(username) user_manager_service = UserManagerService(username)
user, user_password = user_manager_service.create_user( user, user_password = user_manager_service.create_user(
email=email, password=password email=email, password=password, check_email=True
) )
db.session.add(user) db.session.add(user)
db.session.commit() db.session.commit()