"""Tests for session state management functions.""" from unittest.mock import patch import pandas as pd from src.config import DIFFICULTY_PRESETS from src.state.session import get_away_stats, get_home_team_df, init_session_state class TestInitSessionState: """Tests for init_session_state.""" def test_initializes_all_expected_keys(self) -> None: """Verify all default keys are created.""" state: dict = {} with patch("src.state.session.st") as mock_st: mock_st.session_state = state init_session_state() expected_keys = { "home_team", "away_team", "away_team_df", "away_stats", "home_team_df", "radio_index", } assert set(state.keys()) == expected_keys def test_does_not_overwrite_existing_values(self) -> None: """Verify calling init twice does not overwrite existing values.""" state: dict = {"home_team": ["Player A"]} with patch("src.state.session.st") as mock_st: mock_st.session_state = state init_session_state() assert state["home_team"] == ["Player A"] def test_sets_correct_default_away_stats(self) -> None: """Verify away_stats defaults to Regular difficulty preset.""" state: dict = {} with patch("src.state.session.st") as mock_st: mock_st.session_state = state init_session_state() assert state["away_stats"] == list(DIFFICULTY_PRESETS["Regular"]) def test_sets_empty_dataframes_by_default(self) -> None: """Verify DataFrames start empty.""" state: dict = {} with patch("src.state.session.st") as mock_st: mock_st.session_state = state init_session_state() assert isinstance(state["away_team_df"], pd.DataFrame) assert state["away_team_df"].empty assert isinstance(state["home_team_df"], pd.DataFrame) assert state["home_team_df"].empty class TestGetAwayStats: """Tests for get_away_stats.""" def test_returns_stats_from_session(self) -> None: """Verify returns stats when properly set in session.""" state: dict = {"away_stats": [100, 200, 300, 400]} with patch("src.state.session.st") as mock_st: mock_st.session_state = state result = get_away_stats() assert result == [100, 200, 300, 400] def test_returns_defaults_when_invalid(self) -> None: """Verify returns defaults when away_stats is invalid.""" state: dict = {"away_stats": "invalid"} with patch("src.state.session.st") as mock_st: mock_st.session_state = state result = get_away_stats() assert result == list(DIFFICULTY_PRESETS["Regular"]) def test_returns_defaults_on_none(self) -> None: """Verify returns defaults when away_stats is None.""" state: dict = {"away_stats": None} with patch("src.state.session.st") as mock_st: mock_st.session_state = state result = get_away_stats() assert result == list(DIFFICULTY_PRESETS["Regular"]) def test_returns_defaults_on_wrong_length(self) -> None: """Verify returns defaults when away_stats has wrong length.""" state: dict = {"away_stats": [1, 2, 3]} with patch("src.state.session.st") as mock_st: mock_st.session_state = state result = get_away_stats() assert result == list(DIFFICULTY_PRESETS["Regular"]) class TestGetHomeTeamDf: """Tests for get_home_team_df.""" def test_returns_dataframe_from_session(self) -> None: """Verify returns DataFrame when set in session.""" expected_df = pd.DataFrame({"FULL_NAME": ["Player A"]}) state: dict = {"home_team_df": expected_df} with patch("src.state.session.st") as mock_st: mock_st.session_state = state result = get_home_team_df() pd.testing.assert_frame_equal(result, expected_df) def test_returns_empty_dataframe_when_not_set(self) -> None: """Verify returns empty DataFrame when not set.""" state: dict = {} with patch("src.state.session.st") as mock_st: mock_st.session_state = state result = get_home_team_df() assert isinstance(result, pd.DataFrame) assert result.empty