52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
"""Test für src.config — Pydantic-Settings Konfiguration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from src.config import Settings, settings
|
|
|
|
|
|
class TestSettings:
|
|
"""Tests für die zentrale Settings-Klasse."""
|
|
|
|
@patch.dict(os.environ, {"REDIS_HOST": "redis.example.com", "REDIS_PORT": "6380"})
|
|
def test_settings_liest_env_vars(self) -> None:
|
|
class EnvSettings(Settings):
|
|
model_config = {"env_file": None}
|
|
|
|
env = EnvSettings()
|
|
assert env.REDIS_HOST == "redis.example.com"
|
|
assert env.REDIS_PORT == 6380
|
|
|
|
def test_settings_standardwerte(self) -> None:
|
|
"""Standardwerte ohne Umgebungsvariablen."""
|
|
|
|
class EnvSettings(Settings):
|
|
model_config = {"env_file": None}
|
|
|
|
env = EnvSettings()
|
|
assert env.REDIS_HOST == "localhost"
|
|
assert env.REDIS_PORT == 6379
|
|
assert env.APP_HOST == "0.0.0.0"
|
|
assert env.APP_PORT == 5002
|
|
assert env.APP_DEBUG is False
|
|
|
|
def test_settings_falsches_redis_port_wirft(self) -> None:
|
|
"""Ungültiger Port-Typ wirft ValidationError."""
|
|
with pytest.raises(Exception): # type: ignore[misc]
|
|
with patch.dict(os.environ, {"REDIS_PORT": "nicht_zahl"}, clear=True):
|
|
Settings._build_customise_schema()
|
|
Settings.model_rebuild(force=True)
|
|
env = Settings(model_config={"env_file": None})
|
|
_ = env.REDIS_PORT # noqa: B018
|
|
|
|
def test_settings_globale_instance(self) -> None:
|
|
"""globale settings-Instanz ist vom Typ Settings."""
|
|
assert isinstance(settings, Settings)
|
|
assert settings.REDIS_HOST == "localhost"
|
|
assert settings.APP_PORT == 5002
|