"""Pytest configuration and shared fixtures.""" import os import tempfile from pathlib import Path from unittest.mock import MagicMock, patch import pytest @pytest.fixture def temp_env_root(tmp_path): """Create a temporary directory to act as /opt/letsbe/env.""" env_dir = tmp_path / "opt" / "letsbe" / "env" env_dir.mkdir(parents=True) return env_dir @pytest.fixture def mock_settings(temp_env_root): """Mock settings with temporary paths.""" settings = MagicMock() settings.allowed_env_root = str(temp_env_root) settings.allowed_file_root = str(temp_env_root.parent / "data") settings.allowed_stacks_root = str(temp_env_root.parent / "stacks") settings.max_file_size = 10 * 1024 * 1024 return settings @pytest.fixture def mock_get_settings(mock_settings): """Patch get_settings to return mock settings.""" with patch("app.executors.env_update_executor.get_settings", return_value=mock_settings): yield mock_settings @pytest.fixture def sample_env_content(): """Sample ENV file content for testing.""" return """# Database configuration DATABASE_URL=postgres://localhost/mydb API_KEY=secret123 # Feature flags DEBUG=true LOG_LEVEL=info """ @pytest.fixture def existing_env_file(temp_env_root, sample_env_content): """Create an existing ENV file for testing updates.""" env_file = temp_env_root / "app.env" env_file.write_text(sample_env_content) return env_file