test: cover factor rule summaries

This commit is contained in:
69049ed6x 2026-03-07 13:01:19 +08:00
parent d819f08ffe
commit 4c6437ba4e
1 changed files with 22 additions and 0 deletions

View File

@ -11,6 +11,7 @@ SPEC.loader.exec_module(factor_rules)
_candidate_rule_paths = factor_rules._candidate_rule_paths
load_factor_rules = factor_rules.load_factor_rules
summarize_factor_rules = factor_rules.summarize_factor_rules
class FactorRulesPathTests(unittest.TestCase):
@ -68,6 +69,27 @@ class FactorRulesPathTests(unittest.TestCase):
self.assertEqual(rules, [])
self.assertIsNone(loaded_path)
def test_summarize_factor_rules_counts_biases(self):
summary = summarize_factor_rules(
[
{"name": "Value", "signal": "bullish", "weight": "high"},
{"name": "Momentum", "signal": "bearish", "weight": "medium"},
{"name": "Quality", "signal": "neutral", "weight": "low"},
],
ticker="AAPL",
trade_date="2026-03-07",
)
self.assertIn("Loaded 3 manually curated factor rules.", summary)
self.assertIn("- Bullish leaning rules: 1", summary)
self.assertIn("- Bearish leaning rules: 1", summary)
self.assertIn("- Neutral / mixed rules: 1", summary)
def test_summarize_factor_rules_empty_list_warns_against_fabrication(self):
summary = summarize_factor_rules([], ticker="MSFT", trade_date="2026-03-07")
self.assertIn("No factor rules were loaded", summary)
self.assertIn("do not fabricate rule-based signals", summary)
if __name__ == "__main__":
unittest.main()