import pytest from ingestor.config import GatewayConfig _ENV_VARS = ( 'NATS_URL', 'NATS_WRITE_SUBJECT', 'NATS_QUEUE', 'GRPC_ENABLED', 'GRPC_PORT', 'CERT_BUCKET', 'CERT_CACHE_DIR', 'WRITE_TIMESTAMP', 'WRITE_QUALITY', 'WRITE_MIN_PAUSE_S', 'IDLE_CONN_MAX_S', ) @pytest.fixture(autouse=True) def clean_env(monkeypatch): for var in _ENV_VARS: monkeypatch.delenv(var, raising=False) def test_from_env_defaults(): cfg = GatewayConfig.from_env() assert cfg.nats_url == 'nats://localhost:4222' assert cfg.nats_write_subject == 'opc.write' assert cfg.nats_queue == 'gateway-writers' assert cfg.grpc_enabled is False assert cfg.grpc_port == 50051 assert cfg.cert_bucket == 'streamlit-connectors' assert cfg.cert_cache_dir == '/tmp/opc-certs' # noqa: S108 assert cfg.write_timestamp is True assert cfg.write_quality is True assert cfg.write_min_pause_s == 0.0 assert cfg.idle_conn_max_s == 300.0 def test_from_env_overrides(monkeypatch): monkeypatch.setenv('GRPC_ENABLED', 'true') monkeypatch.setenv('GRPC_PORT', '6000') monkeypatch.setenv('WRITE_MIN_PAUSE_S', '0.5') monkeypatch.setenv('WRITE_QUALITY', 'false') cfg = GatewayConfig.from_env() assert cfg.grpc_enabled is True assert cfg.grpc_port == 6000 assert cfg.write_min_pause_s == 0.5 assert cfg.write_quality is False @pytest.mark.parametrize( 'value,expected', [ ('0', False), ('no', False), ('FALSE', False), ('1', True), ('YES', True), ], ) def test_bool_parsing_edge_cases(monkeypatch, value, expected): monkeypatch.setenv('GRPC_ENABLED', value) cfg = GatewayConfig.from_env() assert cfg.grpc_enabled is expected