Skip to content

Commit

Permalink
Another attempt
Browse files Browse the repository at this point in the history
  • Loading branch information
muellerberndt committed Dec 7, 2024
1 parent 908d304 commit ca4c63d
Showing 1 changed file with 45 additions and 62 deletions.
107 changes: 45 additions & 62 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,73 +3,56 @@
import os
from unittest.mock import patch, Mock
import pytest

# Create mock database
mock_db = Mock()
mock_db._engine = Mock()
mock_db._async_engine = Mock()
mock_db._SessionLocal = Mock()
mock_db._AsyncSessionLocal = Mock()
mock_db.session = Mock()
mock_db.async_session = Mock()
mock_db.get_engine = Mock(return_value=Mock())
mock_db.get_async_engine = Mock(return_value=Mock())
mock_db.is_initialized = Mock(return_value=True)

# Create mock session instances
mock_sync_session = Mock()
mock_sync_session.__enter__ = Mock(return_value=mock_sync_session)
mock_sync_session.__exit__ = Mock(return_value=None)

mock_async_session = Mock()
mock_async_session.__aenter__ = Mock(return_value=mock_async_session)
mock_async_session.__aexit__ = Mock(return_value=None)

mock_db.session.return_value.__enter__ = Mock(return_value=mock_sync_session)
mock_db.session.return_value.__exit__ = Mock(return_value=None)
mock_db.async_session.return_value.__aenter__ = Mock(return_value=mock_async_session)
mock_db.async_session.return_value.__aexit__ = Mock(return_value=None)

# Patch database before importing anything else
patch("src.backend.database.Database.__init__", return_value=None).start()
patch("src.backend.database.db", mock_db).start()

# Now import the rest
from src.config.config import Config
import yaml
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import Session
from src.config.config import Config, DEFAULT_CONFIG


@pytest.fixture(autouse=True)
def enable_test_mode():
"""Enable test mode for all tests."""
Config.set_test_mode(True)
yield
Config.set_test_mode(False) # Reset after test
def setup_test_config(tmp_path):
"""Set up test configuration."""
config_file = tmp_path / "config.yml"
with open(config_file, "w") as f:
yaml.dump(DEFAULT_CONFIG, f)


@pytest.fixture(autouse=True)
def reset_config():
"""Reset config singleton between tests."""
# Store original values
original_config = os.environ.get("R4DAR_CONFIG")
original_db_url = os.environ.get("DATABASE_URL")

# Clear config
Config._instance = None
Config._config = None

# Clear environment variables
for key in list(os.environ.keys()):
if key.startswith("R4DAR_") or key == "DATABASE_URL":
del os.environ[key]
os.environ["R4DAR_CONFIG"] = str(config_file)
Config.set_test_mode(True)

yield

# Restore original values
if original_config:
os.environ["R4DAR_CONFIG"] = original_config
if original_db_url:
os.environ["DATABASE_URL"] = original_db_url
Config.set_test_mode(False)
if "R4DAR_CONFIG" in os.environ:
del os.environ["R4DAR_CONFIG"]


# Clean up
Config._instance = None
Config._config = None
@pytest.fixture(autouse=True)
def mock_database():
"""Mock database initialization for all tests."""
mock_db = Mock()
mock_db._engine = Mock()
mock_db._async_engine = Mock()
mock_db._SessionLocal = Mock()
mock_db._AsyncSessionLocal = Mock()
mock_db.session = Mock()
mock_db.async_session = Mock()
mock_db.get_engine = Mock(return_value=Mock())
mock_db.get_async_engine = Mock(return_value=Mock())
mock_db.is_initialized = Mock(return_value=True)

# Create mock session instances
mock_sync_session = Mock()
mock_sync_session.__enter__ = Mock(return_value=mock_sync_session)
mock_sync_session.__exit__ = Mock(return_value=None)

mock_async_session = Mock()
mock_async_session.__aenter__ = Mock(return_value=mock_async_session)
mock_async_session.__aexit__ = Mock(return_value=None)

mock_db.session.return_value.__enter__ = Mock(return_value=mock_sync_session)
mock_db.session.return_value.__exit__ = Mock(return_value=None)
mock_db.async_session.return_value.__aenter__ = Mock(return_value=mock_async_session)
mock_db.async_session.return_value.__aexit__ = Mock(return_value=None)

with patch("src.backend.database.Database.__init__", return_value=None), patch("src.backend.database.db", mock_db):
yield mock_db

0 comments on commit ca4c63d

Please sign in to comment.