36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
import unittest
|
|
|
|
from tradingagents.graph.signal_processing import SignalProcessor
|
|
from tradingagents.schemas import StructuredDecisionValidationError, parse_structured_decision
|
|
|
|
|
|
class StructuredDecisionTests(unittest.TestCase):
|
|
def test_valid_schema_parses_deterministically(self):
|
|
payload = """
|
|
{
|
|
"rating": "BUY",
|
|
"confidence": 0.78,
|
|
"time_horizon": "medium",
|
|
"entry_logic": "Buy on pullbacks above support.",
|
|
"exit_logic": "Exit on a break below support.",
|
|
"position_sizing": "Half position.",
|
|
"risk_limits": "Risk 1% of capital.",
|
|
"catalysts": ["Earnings beat"],
|
|
"invalidators": ["Guidance cut"]
|
|
}
|
|
"""
|
|
decision = parse_structured_decision(payload)
|
|
processor = SignalProcessor(None)
|
|
|
|
self.assertEqual(decision.rating.value, "BUY")
|
|
self.assertEqual(processor.process_signal(payload), "BUY")
|
|
|
|
def test_invalid_schema_raises_validation_error(self):
|
|
payload = '{"confidence": 0.5, "time_horizon": "short"}'
|
|
with self.assertRaises(StructuredDecisionValidationError):
|
|
parse_structured_decision(payload)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|