From b9f83c200fd740e326635f98a92d8ef985b31586 Mon Sep 17 00:00:00 2001 From: Sawyer Hollenshead Date: Tue, 16 Mar 2021 18:22:53 -0400 Subject: [PATCH] Cognito IdP: Raise UsernameExistsException from sign_up when user exists (#3765) * Raise UsernameExistsException from sign_up when user exists * Run formatter * Use pytest.raises * Fix test --- moto/cognitoidp/models.py | 2 ++ tests/test_cognitoidp/test_cognitoidp.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/moto/cognitoidp/models.py b/moto/cognitoidp/models.py index da277a779..58d4eff73 100644 --- a/moto/cognitoidp/models.py +++ b/moto/cognitoidp/models.py @@ -883,6 +883,8 @@ class CognitoIdpBackend(BaseBackend): user_pool = p if user_pool is None: raise ResourceNotFoundError(client_id) + elif username in user_pool.users: + raise UsernameExistsException(username) user = CognitoIdpUser( user_pool_id=user_pool.id, diff --git a/tests/test_cognitoidp/test_cognitoidp.py b/tests/test_cognitoidp/test_cognitoidp.py index 0cfab0039..6b1760e5e 100644 --- a/tests/test_cognitoidp/test_cognitoidp.py +++ b/tests/test_cognitoidp/test_cognitoidp.py @@ -1603,6 +1603,26 @@ def test_sign_up(): result["UserSub"].should_not.be.none +@mock_cognitoidp +def test_sign_up_existing_user(): + conn = boto3.client("cognito-idp", "us-west-2") + user_pool_id = conn.create_user_pool(PoolName=str(uuid.uuid4()))["UserPool"]["Id"] + client_id = conn.create_user_pool_client( + UserPoolId=user_pool_id, ClientName=str(uuid.uuid4()), + )["UserPoolClient"]["ClientId"] + username = str(uuid.uuid4()) + password = str(uuid.uuid4()) + + # Add initial user + conn.sign_up(ClientId=client_id, Username=username, Password=password) + + with pytest.raises(ClientError) as err: + # Attempt to add user again + conn.sign_up(ClientId=client_id, Username=username, Password=password) + + err.value.response["Error"]["Code"].should.equal("UsernameExistsException") + + @mock_cognitoidp def test_confirm_sign_up(): conn = boto3.client("cognito-idp", "us-west-2")