def test_main_ng_with_awsexception_and_existing_user(self):
     with patch('login_facebook_index.FacebookUtil') as facebook_mock, \
      patch('login_facebook_index.UserUtil') as user_mock:
         facebook_mock.return_value.get_user_info.return_value = {
             'user_id': 'facebook-1234',
             'email': '*****@*****.**',
             'display_name': 'my_name'
         }
         user_mock.exists_user.return_value = True
         user_mock.has_user_id.return_value = True
         user_mock.external_provider_login.side_effect = ClientError(
             {'Error': {'Code': 'xxxxxx'}},
             'operation_name'
         )
         params = {
             'body': {
                 'code': 'code',
                 'state': 'state'
             }
         }
         params['body'] = json.dumps(params['body'])
         response = LoginFacebookIndex(params, {}).main()
         self.assertEqual(response['statusCode'], 500)
         self.assertEqual(
             json.loads(response['body']),
             {
                 'message': 'Internal server error'
             }
         )
예제 #2
0
def lambda_handler(event, context):
    login_facebook_index = LoginFacebookIndex(
        event=event,
        context=context,
        cognito=cognito,
        dynamodb=dynamodb
    )
    return login_facebook_index.main()
    def test_main_ok_with_existing_user_and_no_user_id(self):
        with patch('login_facebook_index.FacebookUtil') as facebook_mock, \
         patch('login_facebook_index.UserUtil') as user_mock, patch('login_facebook_index.CryptoUtil') as crypto_mock:
            facebook_mock.return_value.get_user_info.return_value = {
                'user_id': 'Facebook-1234',
                'email': '*****@*****.**',
                'display_name': 'my_name'
            }
            facebook_mock.return_value.get_access_token.return_value = {
                'access_token': 'access_token',
                'id_token': 'id_token'
            }
            facebook_mock.return_value.verify_state_nonce.return_value = True

            crypto_mock.get_external_provider_password.return_value = 'password'
            user_mock.exists_user.return_value = True
            user_mock.has_user_id.return_value = False
            crypto_mock.decrypt_password.return_value = 'password'
            user_mock.external_provider_login.return_value = {
                'AuthenticationResult': {
                    'AccessToken': 'aaaaa',
                    'IdToken': 'bbbbb',
                    'RefreshToken': 'ccccc'
                }
            }
            params = {
                'body': {
                    'code': 'code',
                    'state': 'state'
                }
            }
            params['body'] = json.dumps(params['body'])
            response = LoginFacebookIndex(params, {}, dynamodb=dynamodb).main()
            self.assertEqual(response['statusCode'], 200)
            self.assertEqual(
                json.loads(response['body']),
                {
                    'access_token': 'aaaaa',
                    'id_token': 'bbbbb',
                    'refresh_token': 'ccccc',
                    'last_auth_user': '******',
                    'has_user_id': False,
                    'status': 'login'
                }
            )
            user_mock.external_provider_login.assert_called_with(
                cognito=None,
                password='******',
                provider='xxxxx',
                user_id='Facebook-1234',
                user_pool_app_id='user_pool_id',
                user_pool_id='user_pool_id'
            )
 def test_main_ok_with_creating_new_user(self):
     with patch('login_facebook_index.FacebookUtil') as facebook_mock, \
      patch('login_facebook_index.UserUtil') as user_mock, \
      patch('login_facebook_index.CryptoUtil') as crypto_mock:
         facebook_mock.return_value.get_user_info.return_value = {
             'user_id': 'Facebook-1234',
             'email': '*****@*****.**',
         }
         facebook_mock.return_value.get_access_token.return_value = {
             'access_token': 'access_token',
             'id_token': 'id_token'
         }
         crypto_mock.encrypt_password.return_value = '&yjgFwFeOpd0{0=&y566'
         facebook_mock.return_value.verify_state_nonce.return_value = True
         user_mock.exists_user.return_value = False
         user_mock.create_external_provider_user.return_value = {
             'AuthenticationResult': {
                 'AccessToken': 'aaaaa',
                 'IdToken': 'bbbbb',
                 'RefreshToken': 'ccccc'
             }
         }
         user_mock.add_external_provider_user_info.return_value = None
         params = {
             'body': {
                 'code': 'code',
                 'state': 'state'
             }
         }
         params['body'] = json.dumps(params['body'])
         response = LoginFacebookIndex(params, {}).main()
         self.assertEqual(response['statusCode'], 200)
         self.assertEqual(
             json.loads(response['body']),
             {
                 'access_token': 'aaaaa',
                 'id_token': 'bbbbb',
                 'refresh_token': 'ccccc',
                 'last_auth_user': '******',
                 'has_user_id': False,
                 'status': 'sign_up'
             }
         )
    def test_main_ng_with_awsexception_and_new_user(self):
        with patch('login_facebook_index.FacebookUtil') as facebook_mock, \
         patch('login_facebook_index.UserUtil') as user_mock, patch('login_facebook_index.CryptoUtil') as crypto_mock:
            facebook_mock.return_value.get_user_info.return_value = {
                'user_id': 'facebook-1234',
                'email': '*****@*****.**',
                'display_name': 'my_name'
            }
            facebook_mock.return_value.get_access_token.return_value = {
                'access_token': 'access_token',
                'id_token': 'id_token'
            }
            facebook_mock.return_value.verify_state_nonce.return_value = True

            crypto_mock.get_external_provider_password.return_value = 'password'
            user_mock.exists_user.return_value = False
            user_mock.create_external_provider_user.return_value = ClientError(
                {'Error': {'Code': 'xxxxxx'}},
                'operation_name'
            )
            user_mock.force_non_verified_phone.return_value = None
            user_mock.add_user_profile.return_value = None
            user_mock.add_external_provider_user_info.return_value = None
            user_mock.has_user_id.return_value = True
            params = {
                'body': {
                    'code': 'code',
                    'state': 'state'
                }
            }
            params['body'] = json.dumps(params['body'])
            response = LoginFacebookIndex(params, {}).main()
            self.assertEqual(response['statusCode'], 500)
            self.assertEqual(
                json.loads(response['body']),
                {
                    'message': 'Internal server error'
                }
            )
 def test_main_ng_with_facebookexception(self):
     with patch('login_facebook_index.FacebookUtil') as facebook_mock:
         facebook_mock.return_value.get_user_info.side_effect = FacebookOauthError(
             endpoint='http://example.com',
             status_code=500,
             message='error'
         )
         params = {
             'body': {
                 'code': 'code',
                 'state': 'state'
             }
         }
         params['body'] = json.dumps(params['body'])
         response = LoginFacebookIndex(params, {}).main()
         self.assertEqual(response['statusCode'], 500)
         self.assertEqual(
             json.loads(response['body']),
             {
                 'message': 'Internal server error'
             }
         )
 def assert_bad_request(self, params):
     response = LoginFacebookIndex(params, {}).main()
     self.assertEqual(response['statusCode'], 400)