conftest.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import pytest
  2. import sys
  3. import os
  4. from unittest.mock import MagicMock
  5. from fastapi.testclient import TestClient
  6. # Add the parent directory to sys.path so we can import internal modules
  7. sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  8. # Mock the database and session modules BEFORE importing the app
  9. mock_db = MagicMock()
  10. mock_session = MagicMock()
  11. mock_audit = MagicMock()
  12. from unittest.mock import AsyncMock
  13. mock_audit.log = AsyncMock()
  14. mock_rate_limit = MagicMock()
  15. mock_rate_limit.is_order_flooding.return_value = False
  16. # Mapping of module names to their mocks
  17. mocks = {
  18. "db": mock_db,
  19. "backend.db": mock_db,
  20. "session_utils": mock_session,
  21. "backend.session_utils": mock_session,
  22. "services.audit_service": MagicMock(audit_service=mock_audit),
  23. "backend.services.audit_service": MagicMock(audit_service=mock_audit),
  24. "services.rate_limit_service": MagicMock(rate_limit_service=mock_rate_limit),
  25. "backend.services.rate_limit_service": MagicMock(rate_limit_service=mock_rate_limit),
  26. }
  27. for mod_name, mock_obj in mocks.items():
  28. sys.modules[mod_name] = mock_obj
  29. # Configuration to bypass real Redis/DB
  30. mock_session.create_session.return_value = "mock-session-id"
  31. mock_session.validate_session.return_value = True
  32. from main import app
  33. @pytest.fixture
  34. def client():
  35. """Test client for FastAPI app"""
  36. with TestClient(app) as c:
  37. yield c
  38. @pytest.fixture
  39. def db_mock():
  40. """Fixture to access the mocked db module"""
  41. return mock_db