Skip to content

Commit 19fd09d

Browse files
Refactor mocking of v4.models in test settings and plan_to_mplan_converter to use real classes for improved type handling and consistency
1 parent 221a8cf commit 19fd09d

2 files changed

Lines changed: 37 additions & 18 deletions

File tree

src/tests/backend/v4/config/test_settings.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,27 @@
4242
sys.modules['azure.keyvault.secrets'] = Mock()
4343
sys.modules['azure.keyvault.secrets.aio'] = Mock()
4444

45-
# Mock v4.models for relative imports used in settings.py
46-
mock_v4_models_messages = Mock()
47-
mock_mplan = Mock()
48-
mock_websocket_message_type = Mock()
49-
mock_websocket_message_type.SYSTEM_MESSAGE = 'system_message'
50-
mock_v4_models_messages.MPlan = mock_mplan
51-
mock_v4_models_messages.WebsocketMessageType = mock_websocket_message_type
52-
sys.modules['v4'] = Mock()
53-
sys.modules['v4.models'] = Mock()
45+
# Import the real v4.models classes first to avoid type annotation issues
46+
from backend.v4.models.messages import MPlan, WebsocketMessageType
47+
from backend.v4.models.models import MPlan as MPlanModel, MStep
48+
49+
# Mock v4.models for relative imports used in settings.py, using REAL classes
50+
from types import ModuleType
51+
mock_v4 = ModuleType('v4')
52+
mock_v4_models = ModuleType('v4.models')
53+
mock_v4_models_messages = ModuleType('v4.models.messages')
54+
mock_v4_models_models = ModuleType('v4.models.models')
55+
56+
# Assign real classes to mock modules
57+
mock_v4_models_messages.MPlan = MPlan
58+
mock_v4_models_messages.WebsocketMessageType = WebsocketMessageType
59+
mock_v4_models_models.MPlan = MPlanModel
60+
mock_v4_models_models.MStep = MStep
61+
62+
sys.modules['v4'] = mock_v4
63+
sys.modules['v4.models'] = mock_v4_models
5464
sys.modules['v4.models.messages'] = mock_v4_models_messages
65+
sys.modules['v4.models.models'] = mock_v4_models_models
5566

5667
# Mock common.config.app_config
5768
sys.modules['common'] = Mock()

src/tests/backend/v4/orchestration/helper/test_plan_to_mplan_converter.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,23 @@
2121
# Import the models first (from backend path)
2222
from backend.v4.models.models import MPlan, MStep, PlanStatus
2323

24-
# Mock v4.models.models with the real classes so relative imports work
25-
from types import ModuleType
26-
mock_v4_models_models = ModuleType('models')
27-
mock_v4_models_models.MPlan = MPlan
28-
mock_v4_models_models.MStep = MStep
29-
mock_v4_models_models.PlanStatus = PlanStatus
30-
sys.modules['v4'] = ModuleType('v4')
31-
sys.modules['v4.models'] = ModuleType('models')
32-
sys.modules['v4.models.models'] = mock_v4_models_models
24+
# Check if v4.models.models is already properly set up (running in full test suite)
25+
_existing_v4_models = sys.modules.get('v4.models.models')
26+
_need_mock = _existing_v4_models is None or not hasattr(_existing_v4_models, 'MPlan')
27+
28+
if _need_mock:
29+
# Mock v4.models.models with the real classes so relative imports work
30+
from types import ModuleType
31+
mock_v4_models_models = ModuleType('models')
32+
mock_v4_models_models.MPlan = MPlan
33+
mock_v4_models_models.MStep = MStep
34+
mock_v4_models_models.PlanStatus = PlanStatus
35+
36+
if 'v4' not in sys.modules:
37+
sys.modules['v4'] = ModuleType('v4')
38+
if 'v4.models' not in sys.modules:
39+
sys.modules['v4.models'] = ModuleType('models')
40+
sys.modules['v4.models.models'] = mock_v4_models_models
3341

3442
# Now import the converter
3543
from backend.v4.orchestration.helper.plan_to_mplan_converter import PlanToMPlanConverter

0 commit comments

Comments
 (0)