import importlib def test_lazy_key_loading(monkeypatch, tmp_path): # Simulate interactive env with passphrase set late. monkeypatch.setenv('ENVIRONMENT', 'DEV') monkeypatch.setenv('SNOWFLAKE_KEY_PASSPHRASE', 'passphrase') fake_key = tmp_path / 'rsa_key.p8' fake_key.write_text( '-----BEGIN PRIVATE KEY-----\n' 'MIIB...fake...==\n' '-----END PRIVATE KEY-----' ) monkeypatch.setenv('SNOWFLAKE_PRIVATE_KEY_PATH', str(fake_key)) # Import config fresh to reset connect args. cfg = importlib.reload( importlib.import_module('integration_scripts.config') ) assert cfg.SNOWFLAKE_CONNECT_ARGS == {} # Call loader explicitly. # Monkeypatch cryptography loader to avoid needing a real key. import integration_scripts.config as cfg_mod class DummyKey: def private_bytes(self, *a, **k): return b'PRIVATEKEYBYTES' monkeypatch.setattr( cfg_mod.serialization, 'load_pem_private_key', lambda data, password=None, backend=None: DummyKey() ) cfg.load_snowflake_private_key(force=True) assert 'private_key' in cfg.SNOWFLAKE_CONNECT_ARGS def test_initialize_session(monkeypatch): # Provide minimal config values; patch sessionmaker to record calls. monkeypatch.setenv('SNOWFLAKE_USER', 'user') monkeypatch.setenv('SNOWFLAKE_ACCOUNT', 'acct') monkeypatch.setenv('SNOWFLAKE_ROLE', 'role') monkeypatch.setenv('SNOWFLAKE_DATABASE', 'db') monkeypatch.setenv('SNOWFLAKE_SCHEMA', 'schema') monkeypatch.setenv('SNOWFLAKE_WAREHOUSE', 'wh') import models.snowflake_models as sfm calls = {} # Monkeypatch symbol inside snowflake_models (not module only). monkeypatch.setattr( sfm, 'set_default_sessionmaker', lambda **kw: calls.setdefault('args', kw) ) sfm.initialize_snowflake_session() assert 'args' in calls assert calls['args']['sf_config']['user'] == 'user'