def test_login_social_connect(social_config, active_user, db_session): """Connect and logs user in.""" user = db_session.merge(active_user) profile = { "accounts": [{ "domain": "facebook.com", "userid": "2343" }], "displayName": "teddy", "preferredUsername": "******", "emails": [{ "value": user.email }], "name": "ted", } credentials = {"oauthAccessToken": "7897048593434"} provider_name = "facebook" provider_type = "facebook" user = None request = testing.DummyRequest() request.user = user request.registry = social_config.registry request.remote_addr = "127.0.0.123" request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request.login_perform = MagicMock(name="login_perform") request.login_perform.return_value = {"status": True} view = SocialLoginViews(request) out = view() assert out == {"status": True}
def test_social_login_register(social_config, db_session): """Register fresh user and logs him in.""" profile = { 'accounts': [{'domain': text_type('facebook.com'), 'userid': text_type('2343')}], 'displayName': text_type('teddy'), 'verifiedEmail': text_type('*****@*****.**'), 'preferredUsername': text_type('teddy'), 'emails': [{'value': text_type('*****@*****.**')}], 'name': text_type('ted') } credentials = {'oauthAccessToken': '7897048593434'} provider_name = text_type('facebook') provider_type = text_type('facebook') request = testing.DummyRequest() request.user = None request.registry = social_config.registry request.remote_addr = text_type('127.0.0.123') request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request.login_perform = MagicMock(name='login_perform') request.login_perform.return_value = {'status': True} view = SocialLoginViews(request) out = view() assert out == {'status': True} transaction.commit() # read first new account user = db_session.query(User).one() assert user.is_active assert user.provider_id('facebook') == profile['accounts'][0]['userid']
def test_login_social_connect(social_config, active_user, db_session): """Connect and logs user in.""" user = db_session.merge(active_user) profile = { 'accounts': [{ 'domain': u'facebook.com', 'userid': u'2343' }], 'displayName': u'teddy', 'preferredUsername': u'teddy', 'emails': [{ 'value': user.email }], 'name': u'ted' } credentials = {'oauthAccessToken': '7897048593434'} provider_name = u'facebook' provider_type = u'facebook' user = None request = testing.DummyRequest() request.user = user request.registry = social_config.registry request.remote_addr = u'127.0.0.123' request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request.login_perform = MagicMock(name='login_perform') request.login_perform.return_value = {'status': True} view = SocialLoginViews(request) out = view() assert out == {'status': True}
def test_login_different_social_account(social_config, db_session, facebook_user): """ Login with different social account than connected from same provider. System should let user in, but not change connection. """ # profile mock response profile = { # facebook user id is different than user's 'accounts': [{'domain': text_type('facebook.com'), 'userid': text_type('2343')}], 'displayName': text_type('teddy'), 'verifiedEmail': facebook_user.email, 'preferredUsername': text_type('teddy'), 'emails': [{'value': text_type('*****@*****.**')}], 'name': text_type('ted') } request = testing.DummyRequest() request.user = None request.registry = social_config.registry request.remote_addr = text_type('127.0.0.123') request.context = AuthenticationComplete( profile, {'oauthAccessToken': '7897048593434'}, text_type('facebook'), text_type('facebook')) request.login_perform = MagicMock(name='login_perform') request.login_perform.return_value = {'status': True} view = SocialLoginViews(request) out = view() # user should be authenticated recognized by email! assert out['status'] is True assert facebook_user.provider_id('facebook') is not profile['accounts'][0]['userid']
def test_logged_social_connect_self(social_config, facebook_user, db_session): """Connect self.""" user = db_session.merge(facebook_user) profile = { 'accounts': [{'domain': text_type('facebook.com'), 'userid': user.provider_id('facebook')}], 'displayName': text_type('teddy'), 'preferredUsername': text_type('teddy'), 'emails': [{'value': user.email}], 'name': text_type('ted') } credentials = {'oauthAccessToken': '7897048593434'} provider_name = text_type('facebook') provider_type = text_type('facebook') request = testing.DummyRequest() request.user = user request.registry = social_config.registry request.remote_addr = text_type('127.0.0.123') request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = mock_translate request.login_perform = MagicMock(name='login_perform') request.login_perform.return_value = {'status': True} view = SocialLoginViews(request) out = view() assert out['status'] is True user = db_session.merge(facebook_user) assert user.provider_id('facebook') == profile['accounts'][0]['userid']
def test_aftersociallogin(aftersociallogin_config, aftersociallogin_app, db_session): """Register fresh user and logs him in and check response if redirect from AfterSocialLogIn.""" profile = { 'accounts': [{'domain': u'facebook.com', 'userid': u'2343'}], 'displayName': u'teddy', 'verifiedEmail': u'*****@*****.**', 'preferredUsername': u'teddy', 'emails': [{'value': u'*****@*****.**'}], 'name': u'ted' } credentials = {'oauthAccessToken': '7897048593434'} provider_name = u'facebook' provider_type = u'facebook' request = testing.DummyRequest() request.user = None request.registry = aftersociallogin_config.registry request.remote_addr = u'127.0.0.123' request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) def login_perform(*args, **kwargs): return HTTPFound(location=kwargs['location']) request.login_perform = login_perform view = SocialLoginViews(request) out = view() assert out.location == EVENT_PATH.format(AfterSocialLogIn) transaction.commit() # read first new account user = db_session.query(User).one() assert user.is_active assert user.provider_id('facebook') == profile['accounts'][0]['userid']
def _make_one(self, ident=TEST_OPENID_IDENTS[0], request=None): """Makes a contextual post login request.""" # Create the request context. from velruse import AuthenticationComplete if request is None: request = self._make_request() request.context = AuthenticationComplete(**ident) return request
def test_email_from_context(profile, email): """Test email_from_context email getting method.""" context = AuthenticationComplete( profile, {'oauthAccessToken': '7897048593434'}, u'facebook', u'facebook') view = SocialLoginViews(mock.MagicMock()) assert view._email_from_context(context) == email
def test_alreadyconnected(alreadyconnected_config, facebook_user, db_session): # pylint:disable=redefined-outer-name """ Try to connect facebook account to logged in user used by other users facebook account. Check redirect from SocialAccountAlreadyConnected. """ # this user will be logged and trying to connect facebook's user account. fresh_user = User( email="*****@*****.**", password="******", address_ip="127.0.0.1", ) db_session.add(fresh_user) transaction.commit() user = db_session.merge(facebook_user) fresh_user = db_session.merge(fresh_user) # mock request profile = { "accounts": [{ "domain": "facebook.com", "userid": user.provider_id("facebook"), }], "displayName": "teddy", "preferredUsername": "******", "emails": [{ "value": "*****@*****.**" }], "name": "ted", } credentials = {"oauthAccessToken": "7897048593434"} provider_name = "facebook" provider_type = "facebook" request = testing.DummyRequest() request.user = fresh_user request.registry = alreadyconnected_config.registry request.remote_addr = "127.0.0.123" request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = mock_translate request.login_perform = MagicMock(name="login_perform") request.login_perform.return_value = {"status": True} # call! view = SocialLoginViews(request) out = view() assert out.location == EVENT_PATH.format(SocialAccountAlreadyConnected) transaction.begin() fresh_user = db_session.merge(fresh_user) assert fresh_user.provider_id("facebook") is None
def test_email_from_context(profile, email): """Test email_from_context email getting method.""" from velruse import AuthenticationComplete context = AuthenticationComplete( profile, {"oauthAccessToken": "7897048593434"}, "facebook", "facebook", ) view = SocialLoginViews(mock.MagicMock()) assert view._email_from_context(context) == email
def test_logged_social_connect_used_account(social_config, facebook_user, db_session): """Try to connect facebook account to logged in user used by other user.""" # this user will be logged and trying to connect facebook's user account. fresh_user = User( email="*****@*****.**", password="******", address_ip="127.0.0.1", ) db_session.add(fresh_user) transaction.commit() user = db_session.merge(facebook_user) fresh_user = db_session.merge(fresh_user) # mock request profile = { "accounts": [{ "domain": "facebook.com", "userid": user.provider_id("facebook"), }], "displayName": "teddy", "preferredUsername": "******", "emails": [{ "value": "*****@*****.**" }], "name": "ted", } credentials = {"oauthAccessToken": "7897048593434"} provider_name = "facebook" provider_type = "facebook" request = testing.DummyRequest() request.user = fresh_user request.registry = social_config.registry request.remote_addr = "127.0.0.123" request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = mock_translate request.login_perform = MagicMock(name="login_perform") request.login_perform.return_value = {"status": True} # call! view = SocialLoginViews(request) out = view() # status should be false assert out["status"] is False assert out[ "msg"] == "This ${provider} account is already connected with other account." transaction.begin() fresh_user = db_session.merge(fresh_user) assert fresh_user.provider_id("facebook") is None
def test_logged_social_connect_used_account(social_config, facebook_user, db_session): """Try to connect facebook account to logged in user used by other user.""" # this user will be logged and trying to connect facebook's user account. fresh_user = User(email='*****@*****.**', password='******', address_ip='127.0.0.1') db_session.add(fresh_user) transaction.commit() user = db_session.merge(facebook_user) fresh_user = db_session.merge(fresh_user) # mock request profile = { 'accounts': [{ 'domain': u'facebook.com', 'userid': user.provider_id('facebook') }], 'displayName': u'teddy', 'preferredUsername': u'teddy', 'emails': [{ 'value': u'*****@*****.**' }], 'name': u'ted' } credentials = {'oauthAccessToken': '7897048593434'} provider_name = u'facebook' provider_type = u'facebook' request = testing.DummyRequest() request.user = fresh_user request.registry = social_config.registry request.remote_addr = u'127.0.0.123' request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = lambda msg, *args, **kwargs: msg request.login_perform = MagicMock(name='login_perform') request.login_perform.return_value = {'status': True} # call! view = SocialLoginViews(request) out = view() # status should be false assert out['status'] is False assert out[ 'msg'] == 'This ${provider} account is already connected with other account.' transaction.begin() fresh_user = db_session.merge(fresh_user) assert fresh_user.provider_id('facebook') is None
def test_alreadyconnected(alreadyconnected_config, alreadyconnected_app, facebook_user, db_session): """Try to connect facebook account to logged in user used by other user check redirect from SocialAccountAlreadyConnected.""" # this user will be logged and trying to connect facebook's user account. fresh_user = User(email=text_type('*****@*****.**'), password=text_type('somepassword'), address_ip=text_type('127.0.0.1')) db_session.add(fresh_user) transaction.commit() user = db_session.merge(facebook_user) fresh_user = db_session.merge(fresh_user) # mock request profile = { 'accounts': [{ 'domain': text_type('facebook.com'), 'userid': user.provider_id('facebook') }], 'displayName': text_type('teddy'), 'preferredUsername': text_type('teddy'), 'emails': [{ 'value': text_type('*****@*****.**') }], 'name': text_type('ted') } credentials = {'oauthAccessToken': '7897048593434'} provider_name = text_type('facebook') provider_type = text_type('facebook') request = testing.DummyRequest() request.user = fresh_user request.registry = alreadyconnected_config.registry request.remote_addr = text_type('127.0.0.123') request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = mock_translate request.login_perform = MagicMock(name='login_perform') request.login_perform.return_value = {'status': True} # call! view = SocialLoginViews(request) out = view() assert out.location == EVENT_PATH.format(SocialAccountAlreadyConnected) transaction.begin() fresh_user = db_session.merge(fresh_user) assert fresh_user.provider_id('facebook') is None
def test_logged_social_connect_second_account(social_config, facebook_user, db_session): """Connect second facebook account to logged in user.""" user = db_session.merge(facebook_user) # mock request profile = { 'accounts': [{ 'domain': text_type('facebook.com'), 'userid': text_type('2343') }], 'displayName': text_type('teddy'), 'preferredUsername': text_type('teddy'), 'emails': [{ 'value': text_type('*****@*****.**') }], 'name': text_type('ted') } credentials = {'oauthAccessToken': '7897048593434'} provider_name = text_type('facebook') provider_type = text_type('facebook') request = testing.DummyRequest() request.user = user request.registry = social_config.registry request.remote_addr = text_type('127.0.0.123') request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = mock_translate request.login_perform = MagicMock(name='login_perform') request.login_perform.return_value = {'status': True} view = SocialLoginViews(request) out = view() # status should be false assert out['status'] is False assert out[ 'msg'] == 'Your account is already connected to other ${provider} account.' assert user.provider_id('facebook') is not profile['accounts'][0]['userid']
def test_login_different_social_account(social_config, db_session, facebook_user): # pylint:disable=unused-argument """ Login with different social account than connected from same provider. System should let user in, but not change connection. """ # profile mock response profile = { # facebook user id is different than user's "accounts": [{ "domain": "facebook.com", "userid": "2343" }], "displayName": "teddy", "verifiedEmail": facebook_user.email, "preferredUsername": "******", "emails": [{ "value": "*****@*****.**" }], "name": "ted", } request = testing.DummyRequest() request.user = None request.registry = social_config.registry request.remote_addr = "127.0.0.123" request.context = AuthenticationComplete( profile, {"oauthAccessToken": "7897048593434"}, "facebook", "facebook", ) request.login_perform = MagicMock(name="login_perform") request.login_perform.return_value = {"status": True} view = SocialLoginViews(request) out = view() # user should be authenticated recognized by email! assert out["status"] is True assert facebook_user.provider_id( "facebook") is not profile["accounts"][0]["userid"]
def test_aftersociallogin(aftersociallogin_config, db_session): # pylint:disable=redefined-outer-name """Register fresh user and logs him in and check response if redirect from AfterSocialLogIn.""" profile = { "accounts": [{ "domain": "facebook.com", "userid": "2343" }], "displayName": "teddy", "verifiedEmail": "*****@*****.**", "preferredUsername": "******", "emails": [{ "value": "*****@*****.**" }], "name": "ted", } credentials = {"oauthAccessToken": "7897048593434"} provider_name = "facebook" provider_type = "facebook" request = testing.DummyRequest() request.user = None request.registry = aftersociallogin_config.registry request.remote_addr = "127.0.0.123" request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) def login_perform(*_, **kwargs): return HTTPFound(location=kwargs["location"]) request.login_perform = login_perform view = SocialLoginViews(request) out = view() assert out.location == EVENT_PATH.format(AfterSocialLogIn) transaction.commit() # read first new account user = db_session.query(User).one() assert user.is_active assert user.provider_id("facebook") == profile["accounts"][0]["userid"]
def test_logged_social_connect_self(social_config, facebook_user, db_session): """Connect self.""" user = db_session.merge(facebook_user) profile = { "accounts": [{ "domain": "facebook.com", "userid": user.provider_id("facebook"), }], "displayName": "teddy", "preferredUsername": "******", "emails": [{ "value": user.email }], "name": "ted", } credentials = {"oauthAccessToken": "7897048593434"} provider_name = "facebook" provider_type = "facebook" request = testing.DummyRequest() request.user = user request.registry = social_config.registry request.remote_addr = "127.0.0.123" request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = mock_translate request.login_perform = MagicMock(name="login_perform") request.login_perform.return_value = {"status": True} view = SocialLoginViews(request) out = view() assert out["status"] is True user = db_session.merge(facebook_user) assert user.provider_id("facebook") == profile["accounts"][0]["userid"]
def test_logged_social_connect_second_account(social_config, facebook_user, db_session): """Connect second facebook account to logged in user.""" user = db_session.merge(facebook_user) # mock request profile = { "accounts": [{ "domain": "facebook.com", "userid": "2343" }], "displayName": "teddy", "preferredUsername": "******", "emails": [{ "value": "*****@*****.**" }], "name": "ted", } credentials = {"oauthAccessToken": "7897048593434"} provider_name = "facebook" provider_type = "facebook" request = testing.DummyRequest() request.user = user request.registry = social_config.registry request.remote_addr = "127.0.0.123" request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = mock_translate request.login_perform = MagicMock(name="login_perform") request.login_perform.return_value = {"status": True} view = SocialLoginViews(request) out = view() # status should be false assert out["status"] is False assert out[ "msg"] == "Your account is already connected to other ${provider} account." assert user.provider_id("facebook") is not profile["accounts"][0]["userid"]
def test_logged_social_connect_account(social_config, active_user, db_session): """Connect facebook account to logged in user.""" user = db_session.merge(active_user) profile = { 'accounts': [{ 'domain': u'facebook.com', 'userid': u'2343' }], 'displayName': u'teddy', 'preferredUsername': u'teddy', 'emails': [{ 'value': u'*****@*****.**' }], 'name': u'ted' } credentials = {'oauthAccessToken': '7897048593434'} provider_name = u'facebook' provider_type = u'facebook' request = testing.DummyRequest() request.user = user request.registry = social_config.registry request.remote_addr = u'127.0.0.123' request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request._ = lambda msg, *args, **kwargs: msg request.login_perform = MagicMock(name='login_perform') request.login_perform.return_value = {'status': True} view = SocialLoginViews(request) out = view() assert out['status'] is True transaction.commit() user = db_session.merge(user) assert user.provider_id('facebook') == profile['accounts'][0]['userid']
def test_social_login_register(social_config, db_session): """Register fresh user and logs him in.""" profile = { "accounts": [{ "domain": "facebook.com", "userid": "2343" }], "displayName": "teddy", "verifiedEmail": "*****@*****.**", "preferredUsername": "******", "emails": [{ "value": "*****@*****.**" }], "name": "ted", } credentials = {"oauthAccessToken": "7897048593434"} provider_name = "facebook" provider_type = "facebook" request = testing.DummyRequest() request.user = None request.registry = social_config.registry request.remote_addr = "127.0.0.123" request.context = AuthenticationComplete(profile, credentials, provider_name, provider_type) request.login_perform = MagicMock(name="login_perform") request.login_perform.return_value = {"status": True} view = SocialLoginViews(request) out = view() assert out == {"status": True} transaction.commit() # read first new account user = db_session.query(User).one() assert user.is_active assert user.provider_id("facebook") == profile["accounts"][0]["userid"]
def make_one(self, profile): from velruse import AuthenticationComplete obj = AuthenticationComplete() setattr(obj, 'profile', profile) return obj