import unittest from unittest.mock import MagicMock import sys import os # Mock dependencies to avoid loading the whole project sys.modules['ocr_strip_engine'] = MagicMock() sys.modules['explanation_math_firewall'] = MagicMock() sys.modules['visuals'] = MagicMock() sys.modules['audio_generator'] = MagicMock() sys.modules['gibberish_detector'] = MagicMock() sys.modules['cv2'] = MagicMock() import strategy_policy_engine import math_intent_detector class TestV428StrategyConstraint(unittest.TestCase): def test_policy_engine_geometry(self): intent = "GEOMETRY_ANALYTIC" vector = strategy_policy_engine.get_allowed_strategies(intent) self.assertIn("algebraic_intersection", vector["allowed"]) self.assertIn("differentiation", vector["forbidden"]) def test_policy_engine_linear(self): intent = "SIMPLE_LINEAR_SOLVE" vector = strategy_policy_engine.get_allowed_strategies(intent) self.assertIn("single_variable_isolation", vector["allowed"]) self.assertIn("substitution_method", vector["forbidden"]) def test_intent_merging_logic(self): # Simulation of the logic I added to orchestrator.py intent = "GEOMETRY_ANALYTIC" strategy_vector = strategy_policy_engine.get_allowed_strategies(intent) intent_contract = {"forbidden_strategies": ["guessing"]} if strategy_vector.get("forbidden"): intent_contract["forbidden_strategies"] = list(set(intent_contract.get("forbidden_strategies", []) + strategy_vector["forbidden"])) self.assertIn("differentiation", intent_contract["forbidden_strategies"]) self.assertIn("guessing", intent_contract["forbidden_strategies"]) if __name__ == '__main__': unittest.main()