Ejemplo n.º 1
0
    def test_unit__repr__ok__with_username(self):
        user = User()
        user.display_name = "Damien"
        user.email = "*****@*****.**"
        user.username = "******"

        assert user.__repr__(
        ) == "<User: email='*****@*****.**', username='******' display='Damien'>"
Ejemplo n.º 2
0
 def insert(self):
     u = User()
     u.display_name = "Global manager"
     u.username = "******"
     u.email = "*****@*****.**"
     u.password = "******"
     u.profile = Profile.ADMIN
     u.config = UserConfig()
     self._session.add(u)
Ejemplo n.º 3
0
    def test_unit__create__error__already_used_username(self, session):
        session.flush()
        transaction.commit()

        user1 = User()
        user1.username = "******"

        user2 = User()
        user2.username = "******"

        session.add(user1)
        session.add(user2)
        with pytest.raises(Exception) as caught:
            session.flush()

        # NOTE BS 20200427: caught exception depend as database engine, but we expect
        # "unique" or "duplicate" string in exception message
        assert "unique" in str(caught.value).lower() or "duplicate" in str(
            caught.value).lower()
Ejemplo n.º 4
0
    def test_unit__create__ok__only_username(self, session):
        session.flush()
        transaction.commit()
        username = "******"

        user = User()
        user.username = username

        session.add(user)
        session.flush()
        transaction.commit()

        new_user = session.query(User).filter(User.username == username).one()
        assert new_user.username == username
Ejemplo n.º 5
0
 def anonymize_user(
         self,
         user: User,
         anonymized_user_display_name: typing.Optional[str] = None) -> User:
     """
     :param user: user to anonymize_if_required
     :return: user_id
     """
     hash = str(uuid.uuid4().hex)
     user.display_name = (
         anonymized_user_display_name
         or self.app_config.DEFAULT_ANONYMIZED_USER_DISPLAY_NAME)
     user.email = ANONYMIZED_USER_EMAIL_PATTERN.format(hash=hash)
     user.username = None
     user.is_active = False
     user.is_deleted = True
     self.safe_update(user)
     return user
Ejemplo n.º 6
0
    def test_unit__create__ok__username_and_email(self, session):
        session.flush()
        transaction.commit()
        username = "******"
        email = "*****@*****.**"

        user = User()
        user.email = email
        user.username = username

        session.add(user)
        session.flush()
        transaction.commit()

        new_user = session.query(User).filter(User.email == email).one()

        assert new_user.email == email
        assert new_user.email_address == email
        assert new_user.username == username
Ejemplo n.º 7
0
    def create_minimal_user(
        self,
        email: typing.Optional[str] = None,
        username: typing.Optional[str] = None,
        profile: typing.Optional[Profile] = None,
        save_now=False,
    ) -> User:
        """Previous create_user method"""
        if not email:
            if self._config.EMAIL__REQUIRED:
                raise EmailRequired("Email is required to create an user")
            if not username:
                raise EmailOrUsernameRequired(
                    "Email or username is required to create an user")
        lowercase_email = email.lower() if email is not None else None
        validator = TracimValidator()
        validator.add_validator("email", lowercase_email, user_email_validator)
        validator.validate_all()
        if lowercase_email is not None:
            self._check_email(lowercase_email)
        if username is not None:
            self.check_username(username)
        user = User()
        user.email = lowercase_email
        user.username = username
        # TODO - G.M - 2018-11-29 - Check if this default_value can be
        # incorrect according to user_public_name_validator
        user.display_name = email.split("@")[0] if email else username
        user.created = datetime.datetime.utcnow()
        if not profile:
            profile = Profile.get_profile_from_slug(
                self._config.USER__DEFAULT_PROFILE)
        user.profile = profile

        if save_now:
            self.save(user)

        return user
Ejemplo n.º 8
0
    def update(
        self,
        user: User,
        name: str = None,
        email: str = None,
        password: str = None,
        timezone: str = None,
        lang: str = None,
        auth_type: AuthType = None,
        profile: typing.Optional[Profile] = None,
        allowed_space: typing.Optional[int] = None,
        username: str = None,
        do_save=True,
    ) -> User:
        """Update given user instance with given parameters"""
        validator = TracimValidator()
        validator.add_validator("name", name, user_public_name_validator)
        validator.add_validator("password", password, user_password_validator)
        validator.add_validator("email", email, user_email_validator)
        validator.add_validator("username", name, user_username_validator)
        validator.add_validator("timezone", timezone, user_timezone_validator)
        validator.add_validator("lang", lang, user_lang_validator)
        validator.validate_all()

        if name is not None:
            user.display_name = name

        if auth_type is not None:
            if (auth_type not in [AuthType.UNKNOWN, AuthType.REMOTE]
                    and auth_type not in self._config.AUTH_TYPES):
                raise UserAuthTypeDisabled(
                    'Can\'t update user "{}" auth_type with unavailable value "{}".'
                    .format(user.login, auth_type))
            user.auth_type = auth_type

        if email is not None:
            lowercase_email = email.lower()
            if lowercase_email != user.email:
                self._check_email_modification_allowed(user)
                self._check_email(lowercase_email)
                user.email = lowercase_email

        if username is not None:
            if username != user.username:
                self.check_username(username)
                user.username = username

        if password is not None:
            self._check_password_modification_allowed(user)
            user.password = password

        if timezone is not None:
            user.timezone = timezone

        if lang is not None:
            user.lang = lang

        if profile is not None:
            if self._user and self._user == user:
                raise UserCantChangeIsOwnProfile(
                    "User {} can't change is own profile".format(user.user_id))
            user.profile = profile

        if allowed_space is not None:
            user.allowed_space = allowed_space

        if do_save:
            self.save(user)

        return user