from app import _start_game from token_holdem.render import CSS, DEALER_BUTTON_COORDS, SEAT_COORDS, table_html def test_table_layout_constants_are_eight_seat_maps(): assert SEAT_COORDS == { 0: (50, 82), 1: (23, 78), 2: (8, 54), 3: (18, 24), 4: (50, 12), 5: (82, 24), 6: (92, 54), 7: (77, 78), } assert DEALER_BUTTON_COORDS == { 0: (50, 70), 1: (30, 69), 2: (20, 54), 3: (28, 32), 4: (50, 24), 5: (72, 32), 6: (80, 54), 7: (70, 69), } def test_play_mode_renders_human_plus_seven_llm_seats(): session = _start_game("Tester", 100, "play") assert session.game is not None html = table_html(session.game) assert len(session.game.players) == 8 assert session.game.players[0].is_human is True assert html.count('class="seat seat-') == 8 assert 'class="seat seat-0 human-seat' in html for slot in range(1, 8): assert f'class="seat seat-{slot} llm-seat' in html assert 'class="dealer-button"' in html assert 'class="center-hud"' in html assert 'class="community card-row"' in html assert "Pot " in html assert "Current actor" in html def test_dealer_button_uses_slot_coordinates(): session = _start_game("Tester", 100, "play") assert session.game is not None session.game.dealer_index = 0 html = table_html(session.game) assert "--dealer-x: 50%; --dealer-y: 70%;" in html def test_poker_stage_paints_above_side_rails(): assert ".poker-stage {\n grid-area: stage;\n z-index: calc(var(--z-hud) + 1);" in CSS def test_table_scales_to_stage_container_not_viewport(): assert "container-type: inline-size;" in CSS assert ".token-table {\n position: relative;\n width: 100%;" in CSS assert "height: clamp(500px, 62.5cqw, 700px);" in CSS assert "width: clamp(132px, 14cqw, 206px);" in CSS