Files
photoanalyzer/tests/unit/test_config.py

42 lines
1.3 KiB
Python

"""Config parses env and never leaks secrets."""
from pathlib import Path
from photo_pipeline.config import Config
def test_from_env_reads_prefixed_values():
config = Config.from_env(
{
"PHOTO_PIPELINE_DATA_DIR": "/tmp/pp",
"PHOTO_PIPELINE_PORT": "9123",
"PHOTO_PIPELINE_LOG_FORMAT": "text",
"UNRELATED": "ignored",
}
)
assert config.data_dir == Path("/tmp/pp")
assert config.port == 9123
assert config.log_format == "text"
def test_defaults_and_derived_paths():
config = Config.from_env({})
assert config.host == "127.0.0.1"
assert config.database_path == Path("data") / "photo_pipeline.db"
assert config.database_url == f"sqlite:///{config.database_path}"
def test_secrets_are_masked_everywhere_but_get_secret_value():
config = Config.from_env({"PHOTO_PIPELINE_VISION_API_KEY": "super-secret-key"})
assert config.vision_api_key.get_secret_value() == "super-secret-key"
# Masked in repr, str, and serialized output.
assert "super-secret-key" not in repr(config)
assert "super-secret-key" not in str(config)
assert "super-secret-key" not in config.model_dump_json()
def test_missing_secret_is_none():
config = Config.from_env({})
assert config.vision_api_key is None
assert config.immich_api_key is None