Example #1
0
    def _sign_up_rating(self, user, rank):
        rating = min_rating(rank)

        if rating < min_rating('20k') or rating > min_rating('3d'):
            raise HTTPError(400, 'invalid rank')

        user.rating = rating
        user.rating_data = Player(rating)
Example #2
0
class UserFactory(SQLAlchemyModelFactory):
    class Meta:
        model = User
        sqlalchemy_session = session

    last_activity_at = datetime.utcnow()
    email = FuzzyText(suffix='@test.test')
    password = ''
    display = FuzzyText()
    info_text = FuzzyText()
    is_online = True
    rating = 1000
    rating_data = factory.lazy_attribute(lambda o: Player(o.rating))

    @factory.post_generation
    def factory_password(self, *args, **kwargs):
        self.set_password('pw')
        session.commit()
Example #3
0
def make_user(name='', password='', email='', rank=100):
    """ Make a new user.
        Input:
            name (str): The display attribute of the user.
            password (str): The password for the user.
            email (str): An email address eg [email protected].
            rank (float): The rank to assign the user. Default 20k.
    """
    session = _makesession()

    assert name != ''
    assert password != ''
    user = User(display=name,
                email=email,
                is_active=True)
    user.set_password(password)
    user.rating = rank
    user.rating_data = Player(rank)

    session.add(user)
    session.commit()
Example #4
0
def test_apply_rating_periods(db):
    p1 = Player(1450, 200)
    p2 = Player(1650, 100)
    missed_p1 = 20
    missed_p2 = 100

    for _ in range(missed_p1):
        p1.update_rating()

    for _ in range(missed_p2):
        p2.update_rating()

    p1.add_result(Result(WIN, p2.rating, p2.deviation, p2.volatility))
    p2.add_result(Result(LOSS, p1.rating, p1.deviation, p1.volatility))

    p1.update_rating()
    p2.update_rating()

    game = GameFactory(stage='finished', result='B+R',
                       black_user__rating=1450, white_user__rating=1650)
    game.black_user.rating_data.deviation = 200
    game.black_user.apply_rating_data_change()
    game.black_user.last_rating_update_at = datetime.utcnow(
    ) - settings.RATING_PERIOD_DURATION*missed_p1

    game.white_user.rating_data.deviation = 100
    game.white_user.apply_rating_data_change()
    game.white_user.last_rating_update_at = datetime.utcnow(
    ) - settings.RATING_PERIOD_DURATION*missed_p2

    svc = RatingService(db)
    svc.update_ratings(game)

    assert game.black_user.rating == p1.rating
    assert game.white_user.rating == p2.rating
Example #5
0
def opponents():
    return [
        Player(1400, 30, DEFAULT_VOLATILITY),
        Player(1550, 100, DEFAULT_VOLATILITY),
        Player(1700, 300, DEFAULT_VOLATILITY),
    ]
Example #6
0
def player():
    return Player(1500, 200, DEFAULT_VOLATILITY)