from copy import deepcopy import pytest from tests.config_reader import get_product_config, get_setup_configs @pytest.mark.parametrize("common_session", [False, True]) @pytest.mark.parametrize("common_token", [False, True]) @pytest.mark.parametrize("session_override", [None, False, True]) @pytest.mark.parametrize("token_override", [None, False, True]) def test_product_flags_inherit_or_override(common_session, common_token, session_override, token_override): product = {"me_instance": "55", "token": {"market_code": "NATIONAL", "product_codes": "TEST"}} if session_override is not None: product["run_session"] = session_override if token_override is not None: product["run_token"] = token_override config = {"setup": {"run_session": common_session, "run_token": common_token}, "products": {"RTM": product}} session = common_session if session_override is None else session_override token = common_token if token_override is None else token_override expected = "combined" if session and token else "session" if session else "token" if token else None for mode in ("combined", "session", "token"): assert len(get_setup_configs(mode, config)) == int(mode == expected) def test_mixed_products_defaults_and_no_mutation(): config = { "setup": {"run_session": True, "run_token": False, "session": {"start_offset_minutes": 7, "end_time": "20:30"}}, "products": { "IDAS": {"me_instance": "55", "session": {"end_time": "21:00"}}, "RTM": {"run_session": False, "run_token": True, "token": {"market_code": "NATIONAL", "product_codes": ["RTM1"]}}, "REC": {"enabled": False}, "RA": {"run_session": False}, }, } original = deepcopy(config) assert [c["product_name"] for c in get_setup_configs("session", config)] == ["IDAS"] assert [c["product_name"] for c in get_setup_configs("token", config)] == ["RTM"] assert get_setup_configs("combined", config) == [] resolved = get_product_config("IDAS", config) assert resolved["setup"]["session"] == {"start_offset_minutes": 7, "end_time": "21:00"} assert config == original def test_missing_required_settings_fail_before_browser_start(): with pytest.raises(ValueError, match="me_instance"): get_setup_configs("session", {"setup": {"run_token": False}, "products": {"REC": {}}}) with pytest.raises(ValueError, match="market_code"): get_setup_configs("token", {"setup": {"run_session": False}, "products": {"REC": {}}}) def test_legacy_config_remains_supported(): config = {"product": {"me_instance": "55"}, "trading_token_idas": {"market_code": "NATIONAL", "product_code": "IDAS4"}} assert get_setup_configs("combined", config)[0]["token"] == config["trading_token_idas"]