TradingAgents/tests/test_default_config.py

178 lines
6.9 KiB
Python

import os
from tradingagents.default_config import DEFAULT_CONFIG
class TestDefaultConfig:
"""Test suite for DEFAULT_CONFIG dictionary."""
def test_default_config_exists(self):
"""Test that DEFAULT_CONFIG is defined and is a dictionary."""
assert DEFAULT_CONFIG is not None
assert isinstance(DEFAULT_CONFIG, dict)
def test_project_dir_configured(self):
"""Test that project_dir is configured."""
assert "project_dir" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["project_dir"], str)
assert os.path.isabs(DEFAULT_CONFIG["project_dir"])
def test_results_dir_configured(self):
"""Test that results_dir is configured."""
assert "results_dir" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["results_dir"], str)
def test_llm_provider_configured(self):
"""Test that llm_provider is configured."""
assert "llm_provider" in DEFAULT_CONFIG
assert DEFAULT_CONFIG["llm_provider"] in [
"openai",
"anthropic",
"google",
"ollama",
]
def test_llm_models_configured(self):
"""Test that LLM models are configured."""
assert "deep_think_llm" in DEFAULT_CONFIG
assert "quick_think_llm" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["deep_think_llm"], str)
assert isinstance(DEFAULT_CONFIG["quick_think_llm"], str)
def test_backend_url_configured(self):
"""Test that backend_url is configured."""
assert "backend_url" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["backend_url"], str)
assert DEFAULT_CONFIG["backend_url"].startswith("http")
def test_debate_rounds_configured(self):
"""Test that debate round limits are configured."""
assert "max_debate_rounds" in DEFAULT_CONFIG
assert "max_risk_discuss_rounds" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["max_debate_rounds"], int)
assert isinstance(DEFAULT_CONFIG["max_risk_discuss_rounds"], int)
assert DEFAULT_CONFIG["max_debate_rounds"] > 0
assert DEFAULT_CONFIG["max_risk_discuss_rounds"] > 0
def test_recur_limit_configured(self):
"""Test that recursion limit is configured."""
assert "max_recur_limit" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["max_recur_limit"], int)
assert DEFAULT_CONFIG["max_recur_limit"] >= 100
def test_data_vendors_configured(self):
"""Test that data vendors are configured."""
assert "data_vendors" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["data_vendors"], dict)
required_categories = [
"core_stock_apis",
"technical_indicators",
"fundamental_data",
"news_data",
]
for category in required_categories:
assert category in DEFAULT_CONFIG["data_vendors"]
def test_tool_vendors_configured(self):
"""Test that tool_vendors is configured."""
assert "tool_vendors" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["tool_vendors"], dict)
def test_discovery_config_timeout(self):
"""Test discovery timeout configurations."""
assert "discovery_timeout" in DEFAULT_CONFIG
assert "discovery_hard_timeout" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["discovery_timeout"], int)
assert isinstance(DEFAULT_CONFIG["discovery_hard_timeout"], int)
assert (
DEFAULT_CONFIG["discovery_hard_timeout"]
>= DEFAULT_CONFIG["discovery_timeout"]
)
def test_discovery_config_cache_ttl(self):
"""Test discovery cache TTL configuration."""
assert "discovery_cache_ttl" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["discovery_cache_ttl"], int)
assert DEFAULT_CONFIG["discovery_cache_ttl"] > 0
def test_discovery_config_max_results(self):
"""Test discovery max results configuration."""
assert "discovery_max_results" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["discovery_max_results"], int)
assert DEFAULT_CONFIG["discovery_max_results"] > 0
assert DEFAULT_CONFIG["discovery_max_results"] <= 100
def test_discovery_config_min_mentions(self):
"""Test discovery minimum mentions configuration."""
assert "discovery_min_mentions" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["discovery_min_mentions"], int)
assert DEFAULT_CONFIG["discovery_min_mentions"] >= 1
def test_data_dir_path(self):
"""Test that data_dir path is configured."""
assert "data_dir" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["data_dir"], str)
def test_data_cache_dir_path(self):
"""Test that data_cache_dir is configured."""
assert "data_cache_dir" in DEFAULT_CONFIG
assert isinstance(DEFAULT_CONFIG["data_cache_dir"], str)
assert "data_cache" in DEFAULT_CONFIG["data_cache_dir"]
def test_config_immutability_safety(self):
"""Test that modifying a copy doesn't affect the original."""
original_provider = DEFAULT_CONFIG["llm_provider"]
# Create a copy and modify it
config_copy = DEFAULT_CONFIG.copy()
config_copy["llm_provider"] = "modified_provider"
# Original should remain unchanged
assert DEFAULT_CONFIG["llm_provider"] == original_provider
def test_all_vendor_categories_valid(self):
"""Test that all data vendor categories are valid."""
valid_categories = [
"core_stock_apis",
"technical_indicators",
"fundamental_data",
"news_data",
]
for category in DEFAULT_CONFIG["data_vendors"].keys():
assert category in valid_categories
def test_vendor_values_are_strings(self):
"""Test that all vendor values are strings."""
for vendor in DEFAULT_CONFIG["data_vendors"].values():
assert isinstance(vendor, str)
def test_numeric_configs_positive(self):
"""Test that all numeric configs have sensible positive values."""
numeric_configs = [
"max_debate_rounds",
"max_risk_discuss_rounds",
"max_recur_limit",
"discovery_timeout",
"discovery_hard_timeout",
"discovery_cache_ttl",
"discovery_max_results",
"discovery_min_mentions",
]
for config_key in numeric_configs:
value = DEFAULT_CONFIG[config_key]
assert isinstance(value, int)
assert value > 0
def test_results_dir_uses_env_var(self):
"""Test that results_dir respects environment variable."""
# The config uses os.getenv with a default
results_dir = DEFAULT_CONFIG["results_dir"]
# Should either be from env or default to ./results
assert isinstance(results_dir, str)
assert len(results_dir) > 0