from unittest import mock from unittest.mock import Mock, patch import pytest from jinja2 import Environment, FileSystemLoader from jinjasql import JinjaSql from playlist.connectors.snowflake import BASE_DIR @pytest.fixture(scope="function", autouse=True) def mock_cache(request): if "disable_mock_cache" in request.keywords: yield return with patch("playlist.connectors.redis.redis_client.get") as get: get.return_value = None yield get @pytest.fixture(scope="session", autouse=True) def mock_database_config(): with patch( "playlist.connectors.snowflake.DATABASE_CONFIG", {"database_name": "mock_db", "schema_name": "mock_schema"}, ): yield @pytest.fixture(scope="session", autouse=True) def mock_execute_orm(): with patch("sqlalchemy.orm.session.Session.execute") as execute: yield execute @pytest.fixture(scope="function", autouse=True) def mock_execute(request): if "disable_mock_execute" in request.keywords: yield return with patch("playlist.connectors.snowflake.SnowflakeQuery.execute") as execute: yield execute class MockTemplateEngine(JinjaSql): prepare_query = Mock(return_value=(None, None)) @pytest.fixture(scope="function") def mock_template_engine(): SQL_MACRO_LOCATIONS = [BASE_DIR.joinpath("tests/unit/connectors/sql/macros")] TE = MockTemplateEngine( env=Environment(loader=FileSystemLoader(SQL_MACRO_LOCATIONS)), param_style="named", ) def mock_get_template_engine(): return TE with mock.patch( "playlist.connectors.snowflake.get_template_engine", side_effect=mock_get_template_engine, autospec=True, ) as mock_get_template_engine2: yield TE assert mock_get_template_engine2.called @pytest.fixture(scope="function") def mock_macro_locations(): with patch( "playlist.connectors.snowflake.SQL_MACRO_LOCATIONS", [BASE_DIR.joinpath("tests/unit/connectors/sql/macros")], ): yield @pytest.fixture(autouse=True) def mock_features(): """Mock feature service.""" with patch("playlist.features._check_feature_flag") as features: features.return_value = False yield features