116 lines
5.0 KiB
Python
116 lines
5.0 KiB
Python
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"]
|
|
|
|
|
|
@pytest.mark.parametrize("selected", [[], ["DAILY"], ["WEEKLY"], ["MONTHLY"], ["DAILY", "WEEKLY", "MONTHLY"]])
|
|
def test_upc_session_selection_and_shared_timing(selected):
|
|
config = {
|
|
"setup": {"session": {"start_offset_minutes": 7, "end_time": "20:30"}},
|
|
"products": {"UPC": {
|
|
"run_session": True,
|
|
"run_token": False,
|
|
"session_variants": {
|
|
name: {"enabled": name in selected, "me_instance": instance}
|
|
for name, instance in (("DAILY", "58"), ("WEEKLY", "59"), ("MONTHLY", "60"))
|
|
},
|
|
}},
|
|
}
|
|
original = deepcopy(config)
|
|
sessions = get_setup_configs("session", config)
|
|
assert [c["product_name"] for c in sessions] == [f"UPC_{name}" for name in selected]
|
|
ids = {"DAILY": "58", "WEEKLY": "59", "MONTHLY": "60"}
|
|
assert [c["product"]["me_instance"] for c in sessions] == [ids[name] for name in selected]
|
|
assert all(c["setup"]["session"] == config["setup"]["session"] for c in sessions)
|
|
assert get_setup_configs("combined", config) == []
|
|
assert get_setup_configs("token", config) == []
|
|
assert config == original
|
|
config["products"]["UPC"]["enabled"] = False
|
|
assert get_setup_configs("session", config) == []
|
|
|
|
|
|
def test_upc_token_only_expands_all_enabled_variants():
|
|
config = {
|
|
"setup": {"run_session": True, "run_token": True},
|
|
"products": {
|
|
"UPC": {
|
|
"enabled": True,
|
|
"run_session": False,
|
|
"run_token": True,
|
|
"token": {
|
|
"market_code": "NATIONAL",
|
|
"product_type": "UPC",
|
|
"product_codes": [],
|
|
},
|
|
"session_variants": {
|
|
name: {
|
|
"enabled": True,
|
|
"run_session": False,
|
|
"run_token": True,
|
|
"token": {"create_product_codes": [f"{name}_TOKEN"]},
|
|
}
|
|
for name in ("DAILY", "WEEKLY", "MONTHLY")
|
|
},
|
|
}
|
|
},
|
|
}
|
|
|
|
configs = get_setup_configs("token", config)
|
|
|
|
assert [item["product_name"] for item in configs] == [
|
|
"UPC_DAILY",
|
|
"UPC_WEEKLY",
|
|
"UPC_MONTHLY",
|
|
]
|