From ce91a8d615e4f566ee140223abdd2ff0e2f82497 Mon Sep 17 00:00:00 2001 From: Maksymilian Babarowski Date: Sat, 23 Oct 2021 13:32:56 +0200 Subject: [PATCH] =?UTF-8?q?cognito-idp=20=E2=80=93=20Implemented=20admin?= =?UTF-8?q?=5Fconfirm=5Fsign=5Fup=20(#4462)=20(#4463)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- moto/cognitoidp/models.py | 12 ++++++ moto/cognitoidp/responses.py | 7 ++++ tests/test_cognitoidp/test_cognitoidp.py | 53 ++++++++++++++++++++++++ 3 files changed, 72 insertions(+) diff --git a/moto/cognitoidp/models.py b/moto/cognitoidp/models.py index c904f06ef..3fe810b2b 100644 --- a/moto/cognitoidp/models.py +++ b/moto/cognitoidp/models.py @@ -706,6 +706,18 @@ class CognitoIdpBackend(BaseBackend): user_pool.users[user.username] = user return user + def admin_confirm_sign_up(self, user_pool_id, username): + user_pool = self.user_pools.get(user_pool_id) + if not user_pool: + raise ResourceNotFoundError(f"User pool {user_pool_id} does not exist.") + + user = user_pool._get_user(username) + if not user: + raise UserNotFoundError(f"User does not exist.") + + user.status = UserStatus["CONFIRMED"] + return "" + def admin_get_user(self, user_pool_id, username): user_pool = self.user_pools.get(user_pool_id) if not user_pool: diff --git a/moto/cognitoidp/responses.py b/moto/cognitoidp/responses.py index 1b46a53be..43f655ffd 100644 --- a/moto/cognitoidp/responses.py +++ b/moto/cognitoidp/responses.py @@ -318,6 +318,13 @@ class CognitoIdpResponse(BaseResponse): return json.dumps({"User": user.to_json(extended=True)}) + def admin_confirm_sign_up(self): + user_pool_id = self._get_param("UserPoolId") + username = self._get_param("Username") + return cognitoidp_backends[self.region].admin_confirm_sign_up( + user_pool_id, username + ) + def admin_get_user(self): user_pool_id = self._get_param("UserPoolId") username = self._get_param("Username") diff --git a/tests/test_cognitoidp/test_cognitoidp.py b/tests/test_cognitoidp/test_cognitoidp.py index be9c63a26..dbe59f656 100644 --- a/tests/test_cognitoidp/test_cognitoidp.py +++ b/tests/test_cognitoidp/test_cognitoidp.py @@ -1276,6 +1276,59 @@ def test_admin_create_existing_user(): caught.should.be.true +@mock_cognitoidp +def test_admin_confirm_sign_up(): + conn = boto3.client("cognito-idp", "us-east-1") + + username = str(uuid.uuid4()) + password = "Passw0rd!" + user_pool_id = conn.create_user_pool( + PoolName="us-east-1_aaaaaaaa", AutoVerifiedAttributes=["email"] + )["UserPool"]["Id"] + client_id = conn.create_user_pool_client( + UserPoolId=user_pool_id, ClientName=str(uuid.uuid4()), GenerateSecret=False + )["UserPoolClient"]["ClientId"] + conn.sign_up(ClientId=client_id, Username=username, Password=password) + user = conn.admin_get_user(UserPoolId=user_pool_id, Username=username) + + user["UserStatus"].should.equal("UNCONFIRMED") + + conn.admin_confirm_sign_up(UserPoolId=user_pool_id, Username=username) + user = conn.admin_get_user(UserPoolId=user_pool_id, Username=username,) + + user["UserStatus"].should.equal("CONFIRMED") + + +@mock_cognitoidp +def test_admin_confirm_sign_up_non_existing_user(): + conn = boto3.client("cognito-idp", "us-east-1") + + username = str(uuid.uuid4()) + user_pool_id = conn.create_user_pool( + PoolName="us-east-1_aaaaaaaa", AutoVerifiedAttributes=["email"] + )["UserPool"]["Id"] + + with pytest.raises(ClientError) as exc: + conn.admin_confirm_sign_up(UserPoolId=user_pool_id, Username=username) + + err = exc.value.response["Error"] + err["Code"].should.equal("UserNotFoundException") + err["Message"].should.equal(f"User does not exist.") + + +@mock_cognitoidp +def test_admin_confirm_sign_up_non_existing_pool(): + conn = boto3.client("cognito-idp", "us-east-1") + + user_pool_id = "us-east-1_aaaaaaaa" + with pytest.raises(ClientError) as exc: + conn.admin_confirm_sign_up(UserPoolId=user_pool_id, Username=str(uuid.uuid4())) + + err = exc.value.response["Error"] + err["Code"].should.equal("ResourceNotFoundException") + err["Message"].should.equal(f"User pool {user_pool_id} does not exist.") + + @mock_cognitoidp def test_admin_resend_invitation_existing_user(): conn = boto3.client("cognito-idp", "us-west-2")