Beispiel #1
0
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,
        },
    )
Beispiel #2
0
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
    })
Beispiel #3
0
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
    })
Beispiel #4
0
 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
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #8
0
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]
    })
Beispiel #9
0
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
Beispiel #12
0
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
Beispiel #13
0
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