def show(request, engine_id): try: game = Game.objects.get(engine_id=engine_id) except Game.DoesNotExist: raise Http404 game_board_url = generate_game_url(game) if request.GET.get("enableLinks"): game_board_url = f"{game_board_url}&enableLinks=true" autoplay = request.GET.get("autoplay") if autoplay: game_board_url = f"{game_board_url}&autoplay=true" turn = request.GET.get("turn") if turn: game_board_url = f"{game_board_url}&turn={turn}" frame_rate = request.GET.get("frameRate") if frame_rate: game_board_url = f"{game_board_url}&frameRate={frame_rate}" return render( request, "core/game/show.html", { "url": game_board_url, "game_image": f"https://exporter.battlesnake.io/games/{game.engine_id}/gif", "game": game, }, )
def show(request, id): game_board_url = generate_game_url(id) if "autoplay" in request.META["QUERY_STRING"]: game_board_url = f"{game_board_url}&autoplay=true" return render(request, "games/show.html", { "id": id, "url": game_board_url })
def show(request, id): game_board_url = generate_game_url(id) if 'autoplay' in request.META['QUERY_STRING']: game_board_url = f'{game_board_url}&autoplay=true' return render(request, 'games/show.html', { 'id': id, 'url': game_board_url })
def game_details(self): games = [] for r in self.rounds: for heat in r.heats: for hg in heat.games: status = hg.game.status if hg.game is not None else None games.append({ "id": hg.game.id, "url": generate_game_url(hg.game), "status": status, "round": r.number, "heat": heat.number, "heat_game": hg.number, }) return games
def test_create_next_round_partial_two_heats_uhoh(): bracket = _arrange_tournament("single heat", 10) bracket.create_next_round() hg1 = bracket.rounds[0].heats[1].create_next_game() game = hg1.game rows = bracket.export() heat_2_game_url = f"https://play.battlesnake.io/game/{game.id}" expected_rows = [ [ "Round", "Heat", "Snake Name", "Snake Id", "Game 1 URL", "Game 2 URL", "Game 3 URL", ], ["Round 1", "Heat 1", "Snake 1", "snk_1"], ["Round 1", "Heat 1", "Snake 3", "snk_3"], ["Round 1", "Heat 1", "Snake 5", "snk_5"], ["Round 1", "Heat 1", "Snake 7", "snk_7"], ["Round 1", "Heat 1", "Snake 9", "snk_9"], ["Round 1", "Heat 2", "Snake 10", "snk_10", heat_2_game_url], ["Round 1", "Heat 2", "Snake 2", "snk_2", heat_2_game_url], ["Round 1", "Heat 2", "Snake 4", "snk_4", heat_2_game_url], ["Round 1", "Heat 2", "Snake 6", "snk_6", heat_2_game_url], ["Round 1", "Heat 2", "Snake 8", "snk_8", heat_2_game_url], ] expected_game_details = [ { "id": game.id, "status": "complete", "round": 1, "heat": 1, "heat_game": 1, "url": generate_game_url(game.engine_id), } ] assert rows == expected_rows
def index(request): games = list( Game.objects.filter(status=Game.Status.COMPLETE, turn__gte=100) .prefetch_related("gamesnake_set") .order_by("-created")[:40] ) random.shuffle(games) games = [g for g in games if g.gamesnake_set.count() > 1] return render( request, "core/home.html", { "games": [ { "url": generate_game_url(g) + "&autoplay=true&hideScoreboard=true&hideMediaControls=true&frameRate=6", "engine_id": g.engine_id, } for g in games[:4] ] }, )
def test_create_next_round_partial_two_heats_uhoh(): bracket = _arrange_tournament("single heat", 10) bracket.create_next_round() hg1 = bracket.rounds[0].heats[1].create_next_game() game = hg1.game rows = bracket.export() heat_2_game_url = f'https://play.battlesnake.io/game/{game.id}' expected_rows = [ [ 'Round', 'Heat', 'Snake Name', 'Snake Id', "Game 1 URL", "Game 2 URL", "Game 3 URL" ], ['Round 1', 'Heat 1', 'Snake 1', 'snk_1'], ['Round 1', 'Heat 1', 'Snake 3', 'snk_3'], ['Round 1', 'Heat 1', 'Snake 5', 'snk_5'], ['Round 1', 'Heat 1', 'Snake 7', 'snk_7'], ['Round 1', 'Heat 1', 'Snake 9', 'snk_9'], ['Round 1', 'Heat 2', 'Snake 10', 'snk_10', heat_2_game_url], ['Round 1', 'Heat 2', 'Snake 2', 'snk_2', heat_2_game_url], ['Round 1', 'Heat 2', 'Snake 4', 'snk_4', heat_2_game_url], ['Round 1', 'Heat 2', 'Snake 6', 'snk_6', heat_2_game_url], ['Round 1', 'Heat 2', 'Snake 8', 'snk_8', heat_2_game_url], ] expected_game_details = [ { 'id': game.id, 'status': 'complete', "round": 1, "heat": 1, "heat_game": 1, "url": generate_game_url(game.engine_id) }, ] assert rows == expected_rows
def cast_current_game(request, tournament_id): tournament = Tournament.objects.get(id=tournament_id) heat_game = HeatGame.objects.get(id=request.POST.get("heat_game_id")) if heat_game.game.status in [ Game.Status.CREATED, Game.Status.STOPPED, Game.Status.PENDING, ]: heat_game.game.run() title = escape_uri_path( f"{heat_game.heat.round.tournament_bracket.name} / Round {heat_game.heat.round.number} / Group {heat_game.heat.number} / Game {heat_game.number}" ) tournament.casting_uri = ( generate_game_url(heat_game.game) + f"&countdown=10&hideMediaControls=true&boardTheme=dark&frameRate=10&title={title}" ) tournament.save() # flag previously watching games as watched rounds = Round.objects.filter(tournament_bracket__in=tournament.brackets) heats = Heat.objects.filter(round__in=rounds) HeatGame.objects.filter( heat__in=heats, status=HeatGame.WATCHING).update(status=HeatGame.WATCHED) heat_game.status = HeatGame.WATCHING heat_game.save() heat_games = HeatGame.objects.filter(heat__in=heats) return JsonResponse({ "heat_games": [{ "id": hg.id, "status": hg.human_readable_status } for hg in heat_games] })
def show(request, id): return render(request, 'games/show.html', { 'id': id, 'url': generate_game_url(id) })
def test_complete_tournament(update_mock): bracket = _arrange_tournament("single heat", 24) bracket.create_next_round() game11 = bracket.rounds[0].heats[0].create_next_game().game _mark_winner(game11) game12 = bracket.rounds[0].heats[0].create_next_game().game _mark_winner(game12) game21 = bracket.rounds[0].heats[1].create_next_game().game _mark_winner(game21) game22 = bracket.rounds[0].heats[1].create_next_game().game _mark_winner(game22) game31 = bracket.rounds[0].heats[2].create_next_game().game _mark_winner(game31) game32 = bracket.rounds[0].heats[2].create_next_game().game _mark_winner(game32) round2 = bracket.create_next_round() round2_game1 = round2.heats[0].create_next_game().game _mark_winner(round2_game1) round2_game2 = round2.heats[0].create_next_game().game _mark_winner(round2_game2) round2_game3 = round2.heats[0].create_next_game().game _mark_winner(round2_game3) round3 = bracket.create_next_round() round3_game1 = round3.heats[0].create_next_game().game _mark_winner(round3_game1) rows = bracket.export() heat_1_game_1_url = f'https://play.battlesnake.io/game/{game11.id}' heat_1_game_2_url = f'https://play.battlesnake.io/game/{game12.id}' heat_2_game_1_url = f'https://play.battlesnake.io/game/{game21.id}' heat_2_game_2_url = f'https://play.battlesnake.io/game/{game22.id}' heat_3_game_1_url = f'https://play.battlesnake.io/game/{game31.id}' heat_3_game_2_url = f'https://play.battlesnake.io/game/{game32.id}' round_2_heat_1_game_1_url = f'https://play.battlesnake.io/game/{round2_game1.id}' round_2_heat_1_game_2_url = f'https://play.battlesnake.io/game/{round2_game2.id}' round_2_heat_1_game_3_url = f'https://play.battlesnake.io/game/{round2_game3.id}' round_3_heat_1_game_1_url = f'https://play.battlesnake.io/game/{round3_game1.id}' expected_rows = [ [ 'Round', 'Heat', 'Snake Name', 'Snake Id', "Game 1 URL", "Game 2 URL", "Game 3 URL" ], [ 'Round 1', 'Heat 1', 'Snake 1', 'snk_1', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 10', 'snk_10', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 13', 'snk_13', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 16', 'snk_16', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 19', 'snk_19', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 22', 'snk_22', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 4', 'snk_4', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 7', 'snk_7', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 11', 'snk_11', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 14', 'snk_14', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 17', 'snk_17', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 2', 'snk_2', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 20', 'snk_20', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 23', 'snk_23', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 5', 'snk_5', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 8', 'snk_8', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 3', 'Snake 12', 'snk_12', heat_3_game_1_url, heat_3_game_2_url ], [ 'Round 1', 'Heat 3', 'Snake 15', 'snk_15', heat_3_game_1_url, heat_3_game_2_url ], [ 'Round 1', 'Heat 3', 'Snake 18', 'snk_18', heat_3_game_1_url, heat_3_game_2_url ], [ 'Round 1', 'Heat 3', 'Snake 21', 'snk_21', heat_3_game_1_url, heat_3_game_2_url ], [ 'Round 1', 'Heat 3', 'Snake 24', 'snk_24', heat_3_game_1_url, heat_3_game_2_url ], [ 'Round 1', 'Heat 3', 'Snake 3', 'snk_3', heat_3_game_1_url, heat_3_game_2_url ], [ 'Round 1', 'Heat 3', 'Snake 6', 'snk_6', heat_3_game_1_url, heat_3_game_2_url ], [ 'Round 1', 'Heat 3', 'Snake 9', 'snk_9', heat_3_game_1_url, heat_3_game_2_url ], [ 'Round 2', 'Heat 1', 'Snake 1', 'snk_1', round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url ], [ 'Round 2', 'Heat 1', 'Snake 10', 'snk_10', round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url ], [ 'Round 2', 'Heat 1', 'Snake 11', 'snk_11', round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url ], [ 'Round 2', 'Heat 1', 'Snake 12', 'snk_12', round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url ], [ 'Round 2', 'Heat 1', 'Snake 14', 'snk_14', round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url ], [ 'Round 2', 'Heat 1', 'Snake 15', 'snk_15', round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url ], ['Round 3', 'Heat 1', 'Snake 1', 'snk_1', round_3_heat_1_game_1_url], ['Round 3', 'Heat 1', 'Snake 10', 'snk_10', round_3_heat_1_game_1_url], ['Round 3', 'Heat 1', 'Snake 11', 'snk_11', round_3_heat_1_game_1_url], ] expected_game_details = [ { 'id': game11.id, 'status': 'complete', "round": 1, "heat": 1, "heat_game": 1, "url": generate_game_url(game11.engine_id) }, { 'id': game12.id, 'status': 'complete', "round": 1, "heat": 1, "heat_game": 2, "url": generate_game_url(game12.engine_id) }, { 'id': game21.id, 'status': 'complete', "round": 1, "heat": 2, "heat_game": 1, "url": generate_game_url(game21.engine_id) }, { 'id': game22.id, 'status': 'complete', "round": 1, "heat": 2, "heat_game": 2, "url": generate_game_url(game22.engine_id) }, { 'id': game31.id, 'status': 'complete', "round": 1, "heat": 3, "heat_game": 1, "url": generate_game_url(game31.engine_id) }, { 'id': game32.id, 'status': 'complete', "round": 1, "heat": 3, "heat_game": 2, "url": generate_game_url(game32.engine_id) }, { 'id': round2_game1.id, 'status': 'complete', "round": 2, "heat": 1, "heat_game": 1, "url": generate_game_url(round2_game1.engine_id) }, { 'id': round2_game2.id, 'status': 'complete', "round": 2, "heat": 1, "heat_game": 2, "url": generate_game_url(round2_game2.engine_id) }, { 'id': round2_game3.id, 'status': 'complete', "round": 2, "heat": 1, "heat_game": 3, "url": generate_game_url(round2_game3.engine_id) }, { 'id': round3_game1.id, 'status': 'complete', "round": 3, "heat": 1, "heat_game": 1, "url": generate_game_url(round3_game1.engine_id) }, ] assert bracket.game_details() == expected_game_details assert rows == expected_rows
def test_create_next_round_second_round(update_mock): bracket = _arrange_tournament("single heat", 10) bracket.create_next_round() game11 = bracket.rounds[0].heats[0].create_next_game().game _mark_winner(game11) game12 = bracket.rounds[0].heats[0].create_next_game().game _mark_winner(game12) game21 = bracket.rounds[0].heats[1].create_next_game().game _mark_winner(game21) game22 = bracket.rounds[0].heats[1].create_next_game().game _mark_winner(game22) bracket.create_next_round() rows = bracket.export() heat_1_game_1_url = f'https://play.battlesnake.io/game/{game11.id}' heat_1_game_2_url = f'https://play.battlesnake.io/game/{game12.id}' heat_2_game_1_url = f'https://play.battlesnake.io/game/{game21.id}' heat_2_game_2_url = f'https://play.battlesnake.io/game/{game22.id}' expected_rows = [ [ 'Round', 'Heat', 'Snake Name', 'Snake Id', "Game 1 URL", "Game 2 URL", "Game 3 URL" ], [ 'Round 1', 'Heat 1', 'Snake 1', 'snk_1', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 3', 'snk_3', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 5', 'snk_5', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 7', 'snk_7', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 1', 'Snake 9', 'snk_9', heat_1_game_1_url, heat_1_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 10', 'snk_10', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 2', 'snk_2', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 4', 'snk_4', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 6', 'snk_6', heat_2_game_1_url, heat_2_game_2_url ], [ 'Round 1', 'Heat 2', 'Snake 8', 'snk_8', heat_2_game_1_url, heat_2_game_2_url ], ['Round 2', 'Heat 1', 'Snake 1', 'snk_1'], ['Round 2', 'Heat 1', 'Snake 10', 'snk_10'], ['Round 2', 'Heat 1', 'Snake 2', 'snk_2'], ['Round 2', 'Heat 1', 'Snake 3', 'snk_3'], ] expected_game_details = [ { 'id': game11.id, 'status': 'complete', "round": 1, "heat": 1, "heat_game": 1, "url": generate_game_url(game11.engine_id) }, { 'id': game12.id, 'status': 'complete', "round": 1, "heat": 1, "heat_game": 2, "url": generate_game_url(game12.engine_id) }, { 'id': game21.id, 'status': 'complete', "round": 1, "heat": 2, "heat_game": 1, "url": generate_game_url(game21.engine_id) }, { 'id': game22.id, 'status': 'complete', "round": 1, "heat": 2, "heat_game": 2, "url": generate_game_url(game22.engine_id) }, ] assert rows == expected_rows assert bracket.game_details() == expected_game_details
def test_complete_tournament(update_mock): bracket = _arrange_tournament("single heat", 24) bracket.create_next_round() game11 = bracket.rounds[0].heats[0].create_next_game().game _mark_winner(game11) game12 = bracket.rounds[0].heats[0].create_next_game().game _mark_winner(game12) game21 = bracket.rounds[0].heats[1].create_next_game().game _mark_winner(game21) game22 = bracket.rounds[0].heats[1].create_next_game().game _mark_winner(game22) game31 = bracket.rounds[0].heats[2].create_next_game().game _mark_winner(game31) game32 = bracket.rounds[0].heats[2].create_next_game().game _mark_winner(game32) round2 = bracket.create_next_round() round2_game1 = round2.heats[0].create_next_game().game _mark_winner(round2_game1) round2_game2 = round2.heats[0].create_next_game().game _mark_winner(round2_game2) round2_game3 = round2.heats[0].create_next_game().game _mark_winner(round2_game3) round3 = bracket.create_next_round() round3_game1 = round3.heats[0].create_next_game().game _mark_winner(round3_game1) rows = bracket.export() heat_1_game_1_url = f"https://play.battlesnake.io/game/{game11.id}" heat_1_game_2_url = f"https://play.battlesnake.io/game/{game12.id}" heat_2_game_1_url = f"https://play.battlesnake.io/game/{game21.id}" heat_2_game_2_url = f"https://play.battlesnake.io/game/{game22.id}" heat_3_game_1_url = f"https://play.battlesnake.io/game/{game31.id}" heat_3_game_2_url = f"https://play.battlesnake.io/game/{game32.id}" round_2_heat_1_game_1_url = f"https://play.battlesnake.io/game/{round2_game1.id}" round_2_heat_1_game_2_url = f"https://play.battlesnake.io/game/{round2_game2.id}" round_2_heat_1_game_3_url = f"https://play.battlesnake.io/game/{round2_game3.id}" round_3_heat_1_game_1_url = f"https://play.battlesnake.io/game/{round3_game1.id}" expected_rows = [ [ "Round", "Heat", "Snake Name", "Snake Id", "Game 1 URL", "Game 2 URL", "Game 3 URL", ], ["Round 1", "Heat 1", "Snake 1", "snk_1", heat_1_game_1_url, heat_1_game_2_url], [ "Round 1", "Heat 1", "Snake 10", "snk_10", heat_1_game_1_url, heat_1_game_2_url, ], [ "Round 1", "Heat 1", "Snake 13", "snk_13", heat_1_game_1_url, heat_1_game_2_url, ], [ "Round 1", "Heat 1", "Snake 16", "snk_16", heat_1_game_1_url, heat_1_game_2_url, ], [ "Round 1", "Heat 1", "Snake 19", "snk_19", heat_1_game_1_url, heat_1_game_2_url, ], [ "Round 1", "Heat 1", "Snake 22", "snk_22", heat_1_game_1_url, heat_1_game_2_url, ], ["Round 1", "Heat 1", "Snake 4", "snk_4", heat_1_game_1_url, heat_1_game_2_url], ["Round 1", "Heat 1", "Snake 7", "snk_7", heat_1_game_1_url, heat_1_game_2_url], [ "Round 1", "Heat 2", "Snake 11", "snk_11", heat_2_game_1_url, heat_2_game_2_url, ], [ "Round 1", "Heat 2", "Snake 14", "snk_14", heat_2_game_1_url, heat_2_game_2_url, ], [ "Round 1", "Heat 2", "Snake 17", "snk_17", heat_2_game_1_url, heat_2_game_2_url, ], ["Round 1", "Heat 2", "Snake 2", "snk_2", heat_2_game_1_url, heat_2_game_2_url], [ "Round 1", "Heat 2", "Snake 20", "snk_20", heat_2_game_1_url, heat_2_game_2_url, ], [ "Round 1", "Heat 2", "Snake 23", "snk_23", heat_2_game_1_url, heat_2_game_2_url, ], ["Round 1", "Heat 2", "Snake 5", "snk_5", heat_2_game_1_url, heat_2_game_2_url], ["Round 1", "Heat 2", "Snake 8", "snk_8", heat_2_game_1_url, heat_2_game_2_url], [ "Round 1", "Heat 3", "Snake 12", "snk_12", heat_3_game_1_url, heat_3_game_2_url, ], [ "Round 1", "Heat 3", "Snake 15", "snk_15", heat_3_game_1_url, heat_3_game_2_url, ], [ "Round 1", "Heat 3", "Snake 18", "snk_18", heat_3_game_1_url, heat_3_game_2_url, ], [ "Round 1", "Heat 3", "Snake 21", "snk_21", heat_3_game_1_url, heat_3_game_2_url, ], [ "Round 1", "Heat 3", "Snake 24", "snk_24", heat_3_game_1_url, heat_3_game_2_url, ], ["Round 1", "Heat 3", "Snake 3", "snk_3", heat_3_game_1_url, heat_3_game_2_url], ["Round 1", "Heat 3", "Snake 6", "snk_6", heat_3_game_1_url, heat_3_game_2_url], ["Round 1", "Heat 3", "Snake 9", "snk_9", heat_3_game_1_url, heat_3_game_2_url], [ "Round 2", "Heat 1", "Snake 1", "snk_1", round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url, ], [ "Round 2", "Heat 1", "Snake 10", "snk_10", round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url, ], [ "Round 2", "Heat 1", "Snake 11", "snk_11", round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url, ], [ "Round 2", "Heat 1", "Snake 12", "snk_12", round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url, ], [ "Round 2", "Heat 1", "Snake 14", "snk_14", round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url, ], [ "Round 2", "Heat 1", "Snake 15", "snk_15", round_2_heat_1_game_1_url, round_2_heat_1_game_2_url, round_2_heat_1_game_3_url, ], ["Round 3", "Heat 1", "Snake 1", "snk_1", round_3_heat_1_game_1_url], ["Round 3", "Heat 1", "Snake 10", "snk_10", round_3_heat_1_game_1_url], ["Round 3", "Heat 1", "Snake 11", "snk_11", round_3_heat_1_game_1_url], ] expected_game_details = [ { "id": game11.id, "status": "complete", "round": 1, "heat": 1, "heat_game": 1, "url": generate_game_url(game11.engine_id), }, { "id": game12.id, "status": "complete", "round": 1, "heat": 1, "heat_game": 2, "url": generate_game_url(game12.engine_id), }, { "id": game21.id, "status": "complete", "round": 1, "heat": 2, "heat_game": 1, "url": generate_game_url(game21.engine_id), }, { "id": game22.id, "status": "complete", "round": 1, "heat": 2, "heat_game": 2, "url": generate_game_url(game22.engine_id), }, { "id": game31.id, "status": "complete", "round": 1, "heat": 3, "heat_game": 1, "url": generate_game_url(game31.engine_id), }, { "id": game32.id, "status": "complete", "round": 1, "heat": 3, "heat_game": 2, "url": generate_game_url(game32.engine_id), }, { "id": round2_game1.id, "status": "complete", "round": 2, "heat": 1, "heat_game": 1, "url": generate_game_url(round2_game1.engine_id), }, { "id": round2_game2.id, "status": "complete", "round": 2, "heat": 1, "heat_game": 2, "url": generate_game_url(round2_game2.engine_id), }, { "id": round2_game3.id, "status": "complete", "round": 2, "heat": 1, "heat_game": 3, "url": generate_game_url(round2_game3.engine_id), }, { "id": round3_game1.id, "status": "complete", "round": 3, "heat": 1, "heat_game": 1, "url": generate_game_url(round3_game1.engine_id), }, ] assert bracket.game_details() == expected_game_details assert rows == expected_rows
def test_create_next_round_second_round(update_mock): bracket = _arrange_tournament("single heat", 10) bracket.create_next_round() game11 = bracket.rounds[0].heats[0].create_next_game().game _mark_winner(game11) game12 = bracket.rounds[0].heats[0].create_next_game().game _mark_winner(game12) game21 = bracket.rounds[0].heats[1].create_next_game().game _mark_winner(game21) game22 = bracket.rounds[0].heats[1].create_next_game().game _mark_winner(game22) bracket.create_next_round() rows = bracket.export() heat_1_game_1_url = f"https://play.battlesnake.io/game/{game11.id}" heat_1_game_2_url = f"https://play.battlesnake.io/game/{game12.id}" heat_2_game_1_url = f"https://play.battlesnake.io/game/{game21.id}" heat_2_game_2_url = f"https://play.battlesnake.io/game/{game22.id}" expected_rows = [ [ "Round", "Heat", "Snake Name", "Snake Id", "Game 1 URL", "Game 2 URL", "Game 3 URL", ], ["Round 1", "Heat 1", "Snake 1", "snk_1", heat_1_game_1_url, heat_1_game_2_url], ["Round 1", "Heat 1", "Snake 3", "snk_3", heat_1_game_1_url, heat_1_game_2_url], ["Round 1", "Heat 1", "Snake 5", "snk_5", heat_1_game_1_url, heat_1_game_2_url], ["Round 1", "Heat 1", "Snake 7", "snk_7", heat_1_game_1_url, heat_1_game_2_url], ["Round 1", "Heat 1", "Snake 9", "snk_9", heat_1_game_1_url, heat_1_game_2_url], [ "Round 1", "Heat 2", "Snake 10", "snk_10", heat_2_game_1_url, heat_2_game_2_url, ], ["Round 1", "Heat 2", "Snake 2", "snk_2", heat_2_game_1_url, heat_2_game_2_url], ["Round 1", "Heat 2", "Snake 4", "snk_4", heat_2_game_1_url, heat_2_game_2_url], ["Round 1", "Heat 2", "Snake 6", "snk_6", heat_2_game_1_url, heat_2_game_2_url], ["Round 1", "Heat 2", "Snake 8", "snk_8", heat_2_game_1_url, heat_2_game_2_url], ["Round 2", "Heat 1", "Snake 1", "snk_1"], ["Round 2", "Heat 1", "Snake 10", "snk_10"], ["Round 2", "Heat 1", "Snake 2", "snk_2"], ["Round 2", "Heat 1", "Snake 3", "snk_3"], ] expected_game_details = [ { "id": game11.id, "status": "complete", "round": 1, "heat": 1, "heat_game": 1, "url": generate_game_url(game11.engine_id), }, { "id": game12.id, "status": "complete", "round": 1, "heat": 1, "heat_game": 2, "url": generate_game_url(game12.engine_id), }, { "id": game21.id, "status": "complete", "round": 1, "heat": 2, "heat_game": 1, "url": generate_game_url(game21.engine_id), }, { "id": game22.id, "status": "complete", "round": 1, "heat": 2, "heat_game": 2, "url": generate_game_url(game22.engine_id), }, ] assert rows == expected_rows assert bracket.game_details() == expected_game_details