def test_account_setup(app_rest, example_cern, models_fixture): """Test account setup after login.""" with app_rest.test_client() as c: ioc = app_rest.extensions['oauthlib.client'] # Ensure remote apps have been loaded (due to before first request) resp = c.get( url_for('invenio_oauthclient.rest_login', remote_app='cern')) assert resp.status_code == 302 example_response, example_token, example_account_info = example_cern mock_response(app_rest.extensions['oauthlib.client'], 'cern', example_token) mock_remote_get(ioc, 'cern', example_response) resp = c.get( url_for('invenio_oauthclient.rest_authorized', remote_app='cern', code='test', state=get_state('cern'))) assert resp.status_code == 302 expected_url_args = { "message": "Successfully authorized.", "code": 200, } check_response_redirect_url_args(resp, expected_url_args) assert len(g.identity.provides) == 7 datastore = app_rest.extensions['invenio-accounts'].datastore user = datastore.find_user(email='*****@*****.**') assert user with app_rest.test_request_context(): resp = disconnect_rest_handler(ioc.remote_apps['cern']) assert resp.status_code >= 300 login_user(user) assert len(g.identity.provides) == 7 disconnect_rest_handler(ioc.remote_apps['cern'])
def test_account_setup(app_rest, example_cern, models_fixture): """Test account setup after login.""" with app_rest.test_client() as c: ioc = app_rest.extensions['oauthlib.client'] # Ensure remote apps have been loaded (due to before first request) resp = c.get( url_for('invenio_oauthclient.rest_login', remote_app='cern')) assert resp.status_code == 302 example_response, example_token, example_account_info = example_cern mock_response(app_rest.extensions['oauthlib.client'], 'cern', example_token) mock_remote_get(ioc, 'cern', example_response) resp = c.get( url_for('invenio_oauthclient.rest_authorized', remote_app='cern', code='test', state=get_state('cern'))) assert resp.status_code == 302 expected_url_args = { "message": "Successfully authorized.", "code": 200, } check_response_redirect_url_args(resp, expected_url_args) assert len(g.identity.provides) == 7 datastore = app_rest.extensions['invenio-accounts'].datastore user = datastore.find_user(email='*****@*****.**') user.password = hash_password("1234") assert user with app_rest.test_request_context(): resp = disconnect_rest_handler(ioc.remote_apps['cern']) assert resp.status_code >= 300 # simulate login (account_info fetch) g.oauth_logged_in_with_remote = ioc.remote_apps['cern'] login_user(user) assert isinstance(g.identity, Identity) assert g.identity.provides == set([ UserNeed(4), UserNeed('*****@*****.**'), RoleNeed('*****@*****.**'), RoleNeed('*****@*****.**'), RoleNeed('*****@*****.**'), RoleNeed('*****@*****.**'), RoleNeed('*****@*****.**'), ]) logout_user() assert isinstance(g.identity, AnonymousIdentity) # NOTE: Wrong role, g.identity.provides = {Need(['id', 4])} read more # https://github.com/inveniosoftware/invenio-access/blob/e28e76d5361a29202b94d498f1968454c24c5c80/tests/test_loaders.py#L47 assert len(g.identity.provides) == 1 assert "cern_resource" not in session assert OAUTHCLIENT_CERN_SESSION_KEY not in session # Login again to test the disconnect handler g.oauth_logged_in_with_remote = ioc.remote_apps['cern'] login_user(user) assert isinstance(g.identity, Identity) assert len(g.identity.provides) == 7 disconnect_rest_handler(ioc.remote_apps['cern'])