|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- from unittest.mock import MagicMock
-
-
- class ServiceDbTestHelper:
- """
- Helper class for service database query tests.
- """
-
- @staticmethod
- def setup_db_query_filter_by_mock(mock_db, query_results):
- """
- Smart database query mock that responds based on model type and query parameters.
-
- Args:
- mock_db: Mock database session
- query_results: Dict mapping (model_name, filter_key, filter_value) to return value
- Example: {('Account', 'email', 'test@example.com'): mock_account}
- """
-
- def query_side_effect(model):
- mock_query = MagicMock()
-
- def filter_by_side_effect(**kwargs):
- mock_filter_result = MagicMock()
-
- def first_side_effect():
- # Find matching result based on model and filter parameters
- for (model_name, filter_key, filter_value), result in query_results.items():
- if model.__name__ == model_name and filter_key in kwargs and kwargs[filter_key] == filter_value:
- return result
- return None
-
- mock_filter_result.first.side_effect = first_side_effect
-
- # Handle order_by calls for complex queries
- def order_by_side_effect(*args, **kwargs):
- mock_order_result = MagicMock()
-
- def order_first_side_effect():
- # Look for order_by results in the same query_results dict
- for (model_name, filter_key, filter_value), result in query_results.items():
- if (
- model.__name__ == model_name
- and filter_key == "order_by"
- and filter_value == "first_available"
- ):
- return result
- return None
-
- mock_order_result.first.side_effect = order_first_side_effect
- return mock_order_result
-
- mock_filter_result.order_by.side_effect = order_by_side_effect
- return mock_filter_result
-
- mock_query.filter_by.side_effect = filter_by_side_effect
- return mock_query
-
- mock_db.session.query.side_effect = query_side_effect
|