def test_unit__disable_user___ok__nominal_case(self): api = UserApi(current_user=None, session=self.session, config=self.app_config) gapi = GroupApi(current_user=None, session=self.session, config=self.app_config) groups = [gapi.get_one_with_name("users")] user = api.create_user( email="*****@*****.**", password="******", name="bob", groups=groups, timezone="Europe/Paris", do_save=True, do_notify=False, ) user2 = api.create_user( email="*****@*****.**", password="******", name="bob2", groups=groups, timezone="Europe/Paris", do_save=True, do_notify=False, ) api2 = UserApi(current_user=user, session=self.session, config=self.app_config) api2.disable(user2) updated_user2 = api.get_one(user2.user_id) assert updated_user2.is_active is False assert updated_user2.user_id == user2.user_id assert updated_user2.email == user2.email
def _get_user(self, user_id_fetcher: typing.Callable[[], int]) -> User: user_id = user_id_fetcher() uapi = UserApi(None, show_deleted=True, session=self.dbsession, config=self.app_config) return uapi.get_one(user_id)
def _get_candidate_user( self, request: 'TracimRequest', ) -> User: """ Get candidate user :param request: pyramid request :return: user found from header/body """ app_config = request.registry.settings['CFG'] uapi = UserApi(None, show_deleted=True, session=request.dbsession, config=app_config) login = '' try: login = None if 'user_id' in request.matchdict: user_id_str = request.matchdict['user_id'] if not isinstance(user_id_str, str) or not user_id_str.isdecimal(): raise InvalidUserId('user_id is not a correct integer') # nopep8 login = int(request.matchdict['user_id']) if not login: raise UserNotFoundInTracimRequest('You request a candidate user but the context not permit to found one') # nopep8 user = uapi.get_one(login) except UserNotFoundInTracimRequest as exc: raise UserDoesNotExist('User {} not found'.format(login)) from exc return user
def test_unit__disable_user___ok__nominal_case(self, session, app_config): api = UserApi(current_user=None, session=session, config=app_config) profile = Profile.USER user = api.create_user( email="*****@*****.**", password="******", name="bob", profile=profile, timezone="Europe/Paris", do_save=True, do_notify=False, ) user2 = api.create_user( email="*****@*****.**", password="******", name="bob2", profile=profile, timezone="Europe/Paris", do_save=True, do_notify=False, ) api2 = UserApi(current_user=user, session=session, config=app_config) api2.disable(user2) updated_user2 = api.get_one(user2.user_id) assert updated_user2.is_active is False assert updated_user2.user_id == user2.user_id assert updated_user2.email == user2.email
def _get_user(self, user_id_fetcher: typing.Callable): user_id = user_id_fetcher() uapi = UserApi( None, show_deleted=True, session=self.dbsession, config=self.app_config ) return uapi.get_one(user_id)
def test_unit__get_one__ok__nominal_case(self): api = UserApi( current_user=None, session=self.session, config=self.app_config, ) u = api.create_minimal_user('titi@titi') api.update(u, 'titi', 'titi@titi', 'password', do_save=True) one = api.get_one(u.user_id) eq_(u.user_id, one.user_id)
def test_unit__get_one__ok__nominal_case(self): api = UserApi( current_user=None, session=self.session, config=self.app_config, ) u = api.create_minimal_user('titi@titi') api.update(u, 'titi', 'titi@titi', 'password', do_save=True) one = api.get_one(u.user_id) eq_(u.user_id, one.user_id)
def _create_role_event(self, operation: OperationType, role: UserRoleInWorkspace, context: TracimContext) -> None: current_user = context.safe_current_user() workspace_api = WorkspaceApi( session=context.dbsession, config=self._config, show_deleted=True, # INFO - G.M - 2020-17-09 - we do explicitly don't set user here to not # have filter on workspace, in some case we do want user create event on workspace # he doesn't have access: when he remove itself from workspace for example current_user=None, ) workspace_in_context = workspace_api.get_workspace_with_context( workspace_api.get_one(role.workspace_id)) user_api = UserApi(current_user, context.dbsession, self._config, show_deleted=True) role_api = RoleApi(current_user=current_user, session=context.dbsession, config=self._config) try: user_field = EventApi.user_schema.dump( user_api.get_user_with_context(user_api.get_one( role.user_id))).data except UserDoesNotExist: # It is possible to have an already deleted user when deleting his roles. user_field = None role_in_context = role_api.get_user_role_workspace_with_context(role) fields = { Event.USER_FIELD: user_field, Event.WORKSPACE_FIELD: EventApi.workspace_schema.dump(workspace_in_context).data, Event.MEMBER_FIELD: EventApi.workspace_user_role_schema.dump(role_in_context).data, } event_api = EventApi(current_user, context.dbsession, self._config) event_api.create_event( entity_type=EntityType.WORKSPACE_MEMBER, operation=operation, additional_fields=fields, context=context, )
def test_unit__submit_job__OK_nominal_case(self, app_config, session, rq_database_worker) -> None: redis = get_redis_connection(app_config) queue = get_rq_queue(redis, queue_name="event") job = queue.enqueue( # need to enqueue by name as enqueuing with get_public_name fails in pytest "tracim_backend.tests.library.test_rq.get_public_name", 1, timeout=self.JOB_EXECUTION_TIMEOUT, ) while not job.result: if job.exc_info: raise job.exc_info time.sleep(0.1) user_api = UserApi(current_user=None, session=session, config=app_config) user = user_api.get_one(1) job_public_name = job.result assert user.public_name == job_public_name
def test_unit__disable_user___ok__nominal_case(self): api = UserApi( current_user=None, session=self.session, config=self.app_config, ) gapi = GroupApi( current_user=None, session=self.session, config=self.app_config, ) groups = [gapi.get_one_with_name('users')] user = api.create_user( email='*****@*****.**', password='******', name='bob', groups=groups, timezone='Europe/Paris', do_save=True, do_notify=False, ) user2 = api.create_user( email='*****@*****.**', password='******', name='bob2', groups=groups, timezone='Europe/Paris', do_save=True, do_notify=False, ) api2 = UserApi(current_user=user, session=self.session, config=self.app_config) from tracim_backend.exceptions import UserCantDisableHimself api2.disable(user2) updated_user2 = api.get_one(user2.user_id) assert updated_user2.is_active == False assert updated_user2.user_id == user2.user_id assert updated_user2.email == user2.email
def _get_auth_safe_user( self, request: 'TracimRequest', ) -> User: """ Get current pyramid authenticated user from request :param request: pyramid request :return: current authenticated user """ app_config = request.registry.settings['CFG'] uapi = UserApi(None, session=request.dbsession, config=app_config) login = '' try: login = request.authenticated_userid if not login: raise UserNotFoundInTracimRequest('You request a current user but the context not permit to found one') # nopep8 user = uapi.get_one(login) if not user.is_active: raise UserAuthenticatedIsNotActive('User {} is not active'.format(login)) except (UserDoesNotExist, UserNotFoundInTracimRequest) as exc: raise NotAuthenticated('User {} not found'.format(login)) from exc return user
def test_unit__disable_user___ok__nominal_case(self): api = UserApi( current_user=None, session=self.session, config=self.app_config, ) gapi = GroupApi( current_user=None, session=self.session, config=self.app_config, ) groups = [gapi.get_one_with_name('users')] user = api.create_user( email='*****@*****.**', password='******', name='bob', groups=groups, timezone='Europe/Paris', do_save=True, do_notify=False, ) user2 = api.create_user( email='*****@*****.**', password='******', name='bob2', groups=groups, timezone='Europe/Paris', do_save=True, do_notify=False, ) api2 = UserApi(current_user=user,session=self.session, config=self.app_config) from tracim_backend.exceptions import UserCantDisableHimself api2.disable(user2) updated_user2 = api.get_one(user2.user_id) assert updated_user2.is_active == False assert updated_user2.user_id == user2.user_id assert updated_user2.email == user2.email
def get_public_name(user_id: int) -> str: with worker_context() as context: user_api = UserApi(current_user=None, session=context.dbsession, config=context.app_config) return user_api.get_one(user_id).public_name
def create_workspaces_members_role( self, context, request: TracimRequest, hapic_data=None) -> UserRoleWorkspaceInContext: """ Add a member to this workspace. This feature is for workspace managers and administrators. """ newly_created = False email_sent = False app_config = request.registry.settings["CFG"] # type: CFG rapi = RoleApi(current_user=request.current_user, session=request.dbsession, config=app_config) uapi = UserApi( current_user=request.current_user, session=request.dbsession, config=app_config, show_deactivated=True, show_deleted=True, ) try: if hapic_data.body.user_id: user = uapi.get_one(hapic_data.body.user_id) elif hapic_data.body.user_email: user = uapi.get_one_by_email(hapic_data.body.user_email) else: user = uapi.get_one_by_username(hapic_data.body.user_username) if user.is_deleted: raise UserIsDeleted( "This user has been deleted. Unable to invite him.") if not user.is_active: raise UserIsNotActive( "This user is not activated. Unable to invite him") except UserDoesNotExist as exc: if not uapi.allowed_to_invite_new_user(hapic_data.body.user_email): raise exc if app_config.NEW_USER__INVITATION__DO_NOTIFY: user = uapi.create_user( auth_type=AuthType.UNKNOWN, email=hapic_data.body.user_email, password=password_generator(), do_notify=True, ) if (app_config.EMAIL__NOTIFICATION__ACTIVATED and app_config.NEW_USER__INVITATION__DO_NOTIFY and app_config.JOBS__PROCESSING_MODE == app_config.CST.SYNC): email_sent = True else: user = uapi.create_user( auth_type=AuthType.UNKNOWN, email=hapic_data.body.user_email, password=None, do_notify=False, ) uapi.execute_created_user_actions(user) newly_created = True role = rapi.create_one( user=user, workspace=request.current_workspace, role_level=WorkspaceRoles.get_role_from_slug( hapic_data.body.role).level, with_notif=app_config.EMAIL__NOTIFICATION__ENABLED_ON_INVITATION, flush=True, ) return rapi.get_user_role_workspace_with_context( role, newly_created=newly_created, email_sent=email_sent)
def test_unit__get_one__ok__nominal_case(self, session, app_config): api = UserApi(current_user=None, session=session, config=app_config) u = api.create_minimal_user("titi@titi") api.update(u, "titi", "titi@titi", "password", do_save=True) one = api.get_one(u.user_id) assert u.user_id == one.user_id