def test_db_insert(self): lb = Leaderboard('test') lb.clear_database() lb.add_score('TRIVIAL', 120, 'me') lb.add_score('NORMAL', 150, 'notme') val = lb.get_top('TRIVIAL') self.assertEqual(1, len(val)) self.assertEqual(120, val[0]['time']) self.assertEqual('me', val[0]['name'])
class LeaderboardOperations: """ Proxy class between HTTP requests (see request_handler.RequestHandler) and leaderboard.Leaderboard. Parses the request and forwards it. """ kStatus_ok = {"status": "OK"} kStatus_ko = {"status": "KO"} def __init__(self): self.leaderboard = Leaderboard() def get_top(self, path): """ Retrieve top XX of the leaderboard """ top_number = path.rsplit('/', 1).pop() try: sorted_list = self.leaderboard.get_top(int(top_number)) return JSONResponse(200, sorted_list) except ValueError: raise RequestError( 400, "Wrong parameter type expected int got {}".format(top_number)) def get_partial(self, path): """ Retrieve relative ranking around a position """ splitted = path.rsplit('/', 2) try: sorted_list = self.leaderboard.get_partial(int(splitted[1]), int(splitted[2])) return JSONResponse(200, sorted_list) except ValueError: raise RequestError( 400, "Wrong parameter type expected int got {}".format(splitted)) def insert_or_update(self, parsed_req): """ As updating a score in absolute "in this case" is equivalent to creating a new user we don't need separated operations """ self.leaderboard.insert_user_or_update_user_score(parsed_req) return JSONResponse(200, self.kStatus_ok) def update(self, parsed_req): """ Update the score of a specific user ,if exists otherwise rise RequestError """ if not self.leaderboard.has_user(parsed_req['user']): raise RequestError( 404, "User {} does not exist".format(parsed_req['user'])) self.leaderboard.update_user_score(parsed_req) return JSONResponse(200, self.kStatus_ok)
def test_db_top5(self): lb = Leaderboard('test') lb.clear_database() lb.add_score('HARD', 120, 'a') lb.add_score('HARD', 118, 'b') lb.add_score('HARD', 122, 'c') lb.add_score('HARD', -3, 'd') lb.add_score('HARD', -8, 'e') lb.add_score('HARD', 2, 'f') val = lb.get_top('HARD') self.assertEqual(5, len(val)) self.assertEqual(-8, val[0]['time']) self.assertEqual(120, val[4]['time'])