import datetime import pytest from sqlmodel import Session from in_game.gameplay_models import CACHE_LIMIT, Player, player_description, select from in_game.gameplay_queries import get_player_or_none, get_player_id_from_dict from tests.factory import session_fixture def test_create_player(session: Session): all_players = session.exec(select(Player)).all() assert len(all_players) == 42 player_1 = session.get(Player, 1) player_2 = session.get(Player, 12) assert player_1.name == 'Player 0' assert player_1.cardset_id == 2 assert player_1.pos_1 == 'C' assert player_1.description == '2024' assert player_1.franchise == 'Baltimore Orioles' assert player_2.cardset_id == 1 assert player_2.description == 'Live' assert player_2.mlbclub == 'New York Yankees' async def test_cached_players(session: Session): player_1 = session.get(Player, 1) player_2 = session.get(Player, 69) assert (datetime.datetime.now() - player_2.created).total_seconds() > CACHE_LIMIT new_player_1 = await get_player_or_none(session, player_id=player_1.id) new_player_2 = await get_player_or_none(session, player_id=69) new_player_3 = await get_player_or_none(session, player_id=6969) assert player_1.created == new_player_1.created assert (datetime.datetime.now() - new_player_2.created).total_seconds() < CACHE_LIMIT assert new_player_3 is not None def test_player_description(session: Session): player_1 = session.get(Player, 1) player_2 = session.get(Player, 2) player_dict = {'player_id': player_2.id, 'p_name': player_2.name, 'description': player_2.description} assert player_1.name_with_desc == f'2024 Player 0' assert player_description(player_dict=player_dict) == f'Live Player 1' def test_player_id_from_dict(session: Session): assert get_player_id_from_dict({'player_id': 1337}) == 1337 assert get_player_id_from_dict({'id': 6969}) == 6969 with pytest.raises(KeyError) as exc_info: get_player_id_from_dict({}) assert str(exc_info) == "" def test_player_card_link(session: Session): player_1 = session.get(Player, 70) assert player_1.b_card_url == 'player_69_battingcard' assert player_1.p_card_url == 'player_69_pitchingcard' assert player_1.name_card_link('pitching') == '[Player 69](player_69_pitchingcard)' assert player_1.name_card_link('batting') == '[Player 69](player_69_battingcard)'