test(core): add coverage for config and logging modules
Adds tests for VeritextSettings defaults, env var overrides, and the get_logger/configure_logging functions.
This commit is contained in:
73
tests/test_core/test_config.py
Normal file
73
tests/test_core/test_config.py
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
"""Tests for configuration module."""
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from veritext.core.config import VeritextSettings, get_settings
|
||||||
|
|
||||||
|
|
||||||
|
class TestVeritextSettings:
|
||||||
|
"""Tests for VeritextSettings."""
|
||||||
|
|
||||||
|
def test_default_log_level(self) -> None:
|
||||||
|
"""Test default log level is INFO."""
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.log_level == "INFO"
|
||||||
|
|
||||||
|
def test_default_log_format(self) -> None:
|
||||||
|
"""Test default log format is console."""
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.log_format == "console"
|
||||||
|
|
||||||
|
def test_default_benchmark_path(self) -> None:
|
||||||
|
"""Test default benchmark storage path."""
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.benchmark_storage_path == Path("benchmarks")
|
||||||
|
|
||||||
|
def test_default_tokeniser_lowercase(self) -> None:
|
||||||
|
"""Test default tokeniser lowercase setting."""
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.tokeniser_lowercase is True
|
||||||
|
|
||||||
|
def test_default_tokeniser_remove_punctuation(self) -> None:
|
||||||
|
"""Test default tokeniser remove punctuation setting."""
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.tokeniser_remove_punctuation is True
|
||||||
|
|
||||||
|
def test_default_semantic_model(self) -> None:
|
||||||
|
"""Test default semantic model name."""
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.semantic_model == "all-MiniLM-L6-v2"
|
||||||
|
|
||||||
|
def test_default_semantic_cache_enabled(self) -> None:
|
||||||
|
"""Test semantic cache is enabled by default."""
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.semantic_cache_embeddings is True
|
||||||
|
|
||||||
|
def test_env_var_override(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||||
|
"""Test environment variable overrides default settings."""
|
||||||
|
monkeypatch.setenv("VERITEXT_LOG_LEVEL", "DEBUG")
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.log_level == "DEBUG"
|
||||||
|
|
||||||
|
def test_env_var_override_log_format(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||||
|
"""Test environment variable overrides log format."""
|
||||||
|
monkeypatch.setenv("VERITEXT_LOG_FORMAT", "json")
|
||||||
|
settings = VeritextSettings()
|
||||||
|
assert settings.log_format == "json"
|
||||||
|
|
||||||
|
|
||||||
|
class TestGetSettings:
|
||||||
|
"""Tests for get_settings function."""
|
||||||
|
|
||||||
|
def test_get_settings_returns_instance(self) -> None:
|
||||||
|
"""Test get_settings returns a VeritextSettings instance."""
|
||||||
|
settings = get_settings()
|
||||||
|
assert isinstance(settings, VeritextSettings)
|
||||||
|
|
||||||
|
def test_get_settings_returns_valid_defaults(self) -> None:
|
||||||
|
"""Test get_settings returns instance with valid defaults."""
|
||||||
|
settings = get_settings()
|
||||||
|
assert settings.log_level in ("DEBUG", "INFO", "WARNING", "ERROR")
|
||||||
|
assert settings.log_format in ("console", "json")
|
||||||
56
tests/test_core/test_logging.py
Normal file
56
tests/test_core/test_logging.py
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
"""Tests for logging module."""
|
||||||
|
|
||||||
|
from veritext.core.logging import configure_logging, get_logger
|
||||||
|
|
||||||
|
|
||||||
|
class TestGetLogger:
|
||||||
|
"""Tests for get_logger function."""
|
||||||
|
|
||||||
|
def test_get_logger_returns_logger(self) -> None:
|
||||||
|
"""Test get_logger returns a logger instance."""
|
||||||
|
logger = get_logger()
|
||||||
|
assert logger is not None
|
||||||
|
|
||||||
|
def test_get_logger_default_name(self) -> None:
|
||||||
|
"""Test get_logger uses 'veritext' as default name."""
|
||||||
|
logger = get_logger()
|
||||||
|
# The logger should be a bound logger from structlog
|
||||||
|
assert hasattr(logger, "info")
|
||||||
|
assert hasattr(logger, "debug")
|
||||||
|
assert hasattr(logger, "warning")
|
||||||
|
assert hasattr(logger, "error")
|
||||||
|
|
||||||
|
def test_get_logger_custom_name(self) -> None:
|
||||||
|
"""Test get_logger respects custom name parameter."""
|
||||||
|
logger = get_logger("custom.module")
|
||||||
|
assert logger is not None
|
||||||
|
assert hasattr(logger, "info")
|
||||||
|
|
||||||
|
|
||||||
|
class TestConfigureLogging:
|
||||||
|
"""Tests for configure_logging function."""
|
||||||
|
|
||||||
|
def test_configure_logging_console_format(self) -> None:
|
||||||
|
"""Test configure_logging with console format does not raise."""
|
||||||
|
configure_logging(level="INFO", log_format="console")
|
||||||
|
logger = get_logger()
|
||||||
|
assert logger is not None
|
||||||
|
|
||||||
|
def test_configure_logging_json_format(self) -> None:
|
||||||
|
"""Test configure_logging with json format does not raise."""
|
||||||
|
configure_logging(level="DEBUG", log_format="json")
|
||||||
|
logger = get_logger()
|
||||||
|
assert logger is not None
|
||||||
|
|
||||||
|
def test_configure_logging_uses_defaults(self) -> None:
|
||||||
|
"""Test configure_logging uses settings defaults when not provided."""
|
||||||
|
configure_logging()
|
||||||
|
logger = get_logger()
|
||||||
|
assert logger is not None
|
||||||
|
|
||||||
|
def test_configure_logging_different_levels(self) -> None:
|
||||||
|
"""Test configure_logging accepts different log levels."""
|
||||||
|
for level in ("DEBUG", "INFO", "WARNING", "ERROR"):
|
||||||
|
configure_logging(level=level)
|
||||||
|
logger = get_logger()
|
||||||
|
assert logger is not None
|
||||||
Reference in New Issue
Block a user