|
1 | 1 | import sys |
2 | 2 | import asyncio |
3 | 3 | import json |
| 4 | +from contextlib import contextmanager |
4 | 5 | from unittest.mock import patch, MagicMock, mock_open, call, Mock, AsyncMock |
5 | 6 |
|
6 | 7 | import pytest |
|
15 | 16 | sys.modules['boto3'] = boto3_mock |
16 | 17 |
|
17 | 18 | # Mock external dependencies before importing backend modules that might initialize them |
18 | | -with patch('backend.database.client.MinioClient') as minio_mock, \ |
| 19 | +# Mock create_engine to prevent database connection attempts |
| 20 | +mock_engine = MagicMock() |
| 21 | +mock_session_maker = MagicMock() |
| 22 | +mock_db_session = MagicMock() |
| 23 | +mock_session_maker.return_value = mock_db_session |
| 24 | + |
| 25 | +# Mock PostgresClient to prevent database connection attempts |
| 26 | +# Create a mock class that returns the same instance (singleton pattern) |
| 27 | +mock_postgres_client = MagicMock() |
| 28 | +mock_postgres_client.session_maker = mock_session_maker |
| 29 | +mock_postgres_client_class = MagicMock(return_value=mock_postgres_client) |
| 30 | + |
| 31 | +# Mock get_db_session context manager - create a proper context manager mock |
| 32 | +def mock_get_db_session(db_session=None): |
| 33 | + session = mock_db_session if db_session is None else db_session |
| 34 | + @contextmanager |
| 35 | + def _mock_context(): |
| 36 | + yield session |
| 37 | + return _mock_context() |
| 38 | + |
| 39 | +with patch('sqlalchemy.create_engine', return_value=mock_engine), \ |
| 40 | + patch('backend.database.client.PostgresClient', new=mock_postgres_client_class), \ |
| 41 | + patch('backend.database.client.get_db_session', side_effect=mock_get_db_session), \ |
| 42 | + patch('backend.database.client.MinioClient') as minio_mock, \ |
19 | 43 | patch('elasticsearch.Elasticsearch', return_value=MagicMock()) as es_mock: |
20 | 44 | minio_mock.return_value = MagicMock() |
21 | 45 |
|
|
44 | 68 | _resolve_user_tenant_language, |
45 | 69 | ) |
46 | 70 | from consts.model import ExportAndImportAgentInfo, ExportAndImportDataFormat, MCPInfo, AgentRequest |
| 71 | + |
| 72 | + # Ensure db_client is set to our mock after import |
| 73 | + import backend.database.client as db_client_module |
| 74 | + db_client_module.db_client = mock_postgres_client |
47 | 75 |
|
48 | 76 | # Mock Elasticsearch (already done in the import section above, but keeping for reference) |
49 | 77 | elasticsearch_client_mock = MagicMock() |
|
0 commit comments