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_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' } )
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)