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)
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()
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()
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
def opponents(): return [ Player(1400, 30, DEFAULT_VOLATILITY), Player(1550, 100, DEFAULT_VOLATILITY), Player(1700, 300, DEFAULT_VOLATILITY), ]
def player(): return Player(1500, 200, DEFAULT_VOLATILITY)