| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import pytest
- import sys
- import os
- from unittest.mock import MagicMock
- from fastapi.testclient import TestClient
- # Add the parent directory to sys.path so we can import internal modules
- sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
- # Mock the database and session modules BEFORE importing the app
- mock_db = MagicMock()
- mock_session = MagicMock()
- mock_audit = MagicMock()
- from unittest.mock import AsyncMock
- mock_audit.log = AsyncMock()
- mock_rate_limit = MagicMock()
- mock_rate_limit.is_order_flooding.return_value = False
- # Mapping of module names to their mocks
- mocks = {
- "db": mock_db,
- "backend.db": mock_db,
- "session_utils": mock_session,
- "backend.session_utils": mock_session,
- "services.audit_service": MagicMock(audit_service=mock_audit),
- "backend.services.audit_service": MagicMock(audit_service=mock_audit),
- "services.rate_limit_service": MagicMock(rate_limit_service=mock_rate_limit),
- "backend.services.rate_limit_service": MagicMock(rate_limit_service=mock_rate_limit),
- }
- for mod_name, mock_obj in mocks.items():
- sys.modules[mod_name] = mock_obj
- # Configuration to bypass real Redis/DB
- mock_session.create_session.return_value = "mock-session-id"
- mock_session.validate_session.return_value = True
- from main import app
- @pytest.fixture
- def client():
- """Test client for FastAPI app"""
- with TestClient(app) as c:
- yield c
- @pytest.fixture
- def db_mock():
- """Fixture to access the mocked db module"""
- return mock_db
|