def test_login_success(self, base_app):
        '''Login:Social form'''
        from pyramid_fullauth.views.social import SocialLoginViews
        from pyramid import testing
        from velruse import AuthenticationComplete
        from mock import MagicMock

        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'
        user = self.read_user(self.user_data['email'])
        request = testing.DummyRequest()
        request.user = user
        request.config = base_app.config.registry['config']
        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}
        sv = SocialLoginViews(request)
        out = sv.register_social()
        assert out == {'status': True}
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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}
Пример #5
0
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 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_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_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']
Пример #9
0
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}
Пример #10
0
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
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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
Пример #14
0
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']
Пример #15
0
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"]
Пример #16
0
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"]
Пример #17
0
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"]
Пример #18
0
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"]
Пример #19
0
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']
Пример #20
0
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"]