""" Pytest configuration and fixtures. """ import asyncio import os from unittest.mock import AsyncMock, MagicMock import pytest # Set test environment variables before importing handler_base os.environ.setdefault("NATS_URL", "nats://localhost:4222") os.environ.setdefault("REDIS_URL", "redis://localhost:6379") os.environ.setdefault("MILVUS_HOST", "localhost") os.environ.setdefault("OTEL_ENABLED", "false") os.environ.setdefault("MLFLOW_ENABLED", "false") @pytest.fixture(scope="session") def event_loop(): """Create event loop for async tests.""" loop = asyncio.new_event_loop() yield loop loop.close() @pytest.fixture def settings(): """Create test settings.""" from handler_base.config import Settings return Settings( service_name="test-service", service_version="1.0.0-test", otel_enabled=False, mlflow_enabled=False, nats_url="nats://localhost:4222", redis_url="redis://localhost:6379", milvus_host="localhost", ) @pytest.fixture def mock_httpx_client(): """Create a mock httpx AsyncClient.""" client = AsyncMock() client.post = AsyncMock() client.get = AsyncMock() client.aclose = AsyncMock() return client @pytest.fixture def mock_nats_message(): """Create a mock NATS message.""" msg = MagicMock() msg.subject = "test.subject" msg.reply = "test.reply" msg.data = b"\x82\xa8query\xa5hello\xaarequest_id\xa4test" # msgpack return msg @pytest.fixture def sample_embedding(): """Sample embedding vector.""" return [0.1] * 1024 @pytest.fixture def sample_documents(): """Sample documents for testing.""" return [ {"text": "Python is a programming language.", "source": "doc1"}, {"text": "Machine learning is a subset of AI.", "source": "doc2"}, {"text": "Deep learning uses neural networks.", "source": "doc3"}, ]