paper-dynasty-discord/tests/command_logic/test_logic_groundballs.py
Cal Corum 3debfd6e82 Catchup commit
Includes discord_ui refactor, testing overhaul, addition of
2025-07-22 09:22:19 -05:00

349 lines
11 KiB
Python

import pytest
from sqlmodel import Session, select, func
from command_logic.logic_gameplay import advance_runners, gb_result_10, gb_result_11, gb_result_13, gb_result_2, gb_result_3, gb_result_4, gb_result_5, gb_result_6, gb_result_7, gb_result_8, gb_result_9, singles, doubles, triples, gb_result_1, complete_play, log_run_scored, strikeouts, steals, undo_play, xchecks
from in_game.gameplay_models import Lineup, Play
from tests.factory import session_fixture, Game
def test_groundball_1(session: Session):
game_1 = session.get(Game, 2)
play_1 = session.get(Play, 1)
play_1.hit, play_1.batter_final = 1, 2
play_2 = complete_play(session, play_1)
play_2 = gb_result_1(session, play_2)
ending = complete_play(session, play_2)
assert ending.on_second == play_2.on_second
assert play_2.batter_final == None
async def test_groundball_2_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = gb_result_2(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 0
assert ending.on_base_code == 0
async def test_groundball_2_2(session: Session):
play_1 = session.get(Play, 2)
play_1 = await doubles(session, None, play_1, '**')
play_1.starting_outs = 0
play_2 = complete_play(session, play_1)
play_2 = gb_result_2(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_third == play_2.on_second
async def test_groundball_2_3(session: Session):
play_1 = session.get(Play, 2)
play_1 = await triples(session, None, play_1)
play_1.starting_outs = 0
play_2 = complete_play(session, play_1)
play_2 = gb_result_2(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 0
assert ending.away_score == 1
async def test_groundball_3_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = gb_result_3(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 2
assert ending.away_score == 0
async def test_groundball_3_2(session: Session):
play_1 = session.get(Play, 2)
play_1 = await doubles(session, None, play_1, '**')
play_2 = complete_play(session, play_1)
play_2 = gb_result_3(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 3
assert ending.away_score == 0
async def test_groundball_3_3(session: Session):
play_1 = session.get(Play, 2)
play_1 = await triples(session, None, play_1,)
play_2 = complete_play(session, play_1)
play_2 = gb_result_3(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 0
assert ending.away_score == 1
async def test_groundball_4_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = gb_result_4(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 1
assert ending.on_first == play_2.batter
async def test_groundball_4_2(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '**')
play_3 = complete_play(session, play_2)
play_3 = gb_result_4(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 2
assert ending.on_base_code == 1
assert ending.on_first == play_3.batter # Current batter reaches first (gb_4 rule: batter safe at first)
assert ending.away_score == 1
async def test_groundball_5_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await triples(session, None, play_1)
play_2 = complete_play(session, play_1)
play_2 = gb_result_5(session, play_2, True)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 0
assert ending.away_score == 1
async def test_groundball_5_2(session: Session):
play_1 = session.get(Play, 2)
play_1 = await triples(session, None, play_1)
play_2 = complete_play(session, play_1)
play_2 = gb_result_5(session, play_2, False)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 3
assert ending.away_score == 0
async def test_groundball_6_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await doubles(session, None, play_1, '**')
play_2 = complete_play(session, play_1)
play_2 = gb_result_6(session, play_2, True)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 3
async def test_groundball_6_2(session: Session):
play_1 = session.get(Play, 2)
play_1 = await doubles(session, None, play_1, '**')
play_2 = complete_play(session, play_1)
play_2 = gb_result_6(session, play_2, False)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 2
async def test_groundball_7_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await triples(session, None, play_1)
play_2 = complete_play(session, play_1)
play_2 = gb_result_7(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 3
assert ending.away_score == 0
async def test_groundball_7_2(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '**')
play_3 = complete_play(session, play_2)
play_3 = gb_result_7(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 2
assert ending.on_base_code == 6
assert ending.away_score == 0
async def test_groundball_8_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await triples(session, None, play_1)
play_2 = complete_play(session, play_1)
play_2 = gb_result_8(session, play_2)
ending = complete_play(session, play_2)
assert ending.starting_outs == 2
assert ending.on_base_code == 3
assert ending.away_score == 0
async def test_groundball_8_2(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '**')
play_3 = complete_play(session, play_2)
play_3 = gb_result_8(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 2
assert ending.on_base_code == 6
assert ending.away_score == 0
async def test_groundball_9_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '**')
play_3 = complete_play(session, play_2)
play_3 = gb_result_9(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 2
assert ending.on_base_code == 6
assert ending.away_score == 0
async def test_groundball_10_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '*')
play_3 = complete_play(session, play_2)
play_3 = await singles(session, None, play_3, '*')
play_4 = complete_play(session, play_3)
play_4 = gb_result_10(session, play_4)
ending = complete_play(session, play_4)
assert ending.starting_outs == 0
assert ending.on_base_code == 0
assert ending.away_score == 0
async def test_groundball_13_1_1(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '*')
play_3 = complete_play(session, play_2)
play_3.check_pos == '3B'
play_3 = gb_result_13(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 0
assert ending.on_base_code == 0
assert ending.away_score == 0
async def test_groundball_13_1_2(session: Session):
play_1 = session.get(Play, 2)
play_1.starting_outs = 0
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '*')
play_3 = complete_play(session, play_2)
play_3.check_pos = '3B'
play_3 = gb_result_13(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 2
assert ending.on_base_code == 1
assert ending.away_score == 0
async def test_groundball_13_1_3(session: Session):
play_1 = session.get(Play, 2)
play_1.starting_outs = 0
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '*')
play_3 = complete_play(session, play_2)
play_3.check_pos == '1B'
play_3 = gb_result_13(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 2
assert ending.on_base_code == 3
assert ending.away_score == 0
async def test_groundball_13_2(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '*')
play_3 = complete_play(session, play_2)
play_3.check_pos == 'C'
play_3 = gb_result_13(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 0
assert ending.on_base_code == 0
assert ending.away_score == 0
async def test_groundball_13_3(session: Session):
play_1 = session.get(Play, 2)
play_1 = await singles(session, None, play_1, '*')
play_2 = complete_play(session, play_1)
play_2 = await singles(session, None, play_2, '*')
play_3 = complete_play(session, play_2)
play_3.check_pos == '1B'
play_3 = gb_result_13(session, play_3)
ending = complete_play(session, play_3)
assert ending.starting_outs == 0
assert ending.on_base_code == 0
assert ending.away_score == 0