From 0b2bc6c688d1bb255c94a95c3f20533d38ff974b Mon Sep 17 00:00:00 2001 From: Kai Chappell Date: Wed, 4 Feb 2026 00:22:57 +0000 Subject: [PATCH] test(core): add coverage for config and logging modules Adds tests for VeritextSettings defaults, env var overrides, and the get_logger/configure_logging functions. --- tests/test_core/test_config.py | 73 +++++++++++++++++++++++++++++++++ tests/test_core/test_logging.py | 56 +++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 tests/test_core/test_config.py create mode 100644 tests/test_core/test_logging.py diff --git a/tests/test_core/test_config.py b/tests/test_core/test_config.py new file mode 100644 index 0000000..1fe8418 --- /dev/null +++ b/tests/test_core/test_config.py @@ -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") diff --git a/tests/test_core/test_logging.py b/tests/test_core/test_logging.py new file mode 100644 index 0000000..5a34e5f --- /dev/null +++ b/tests/test_core/test_logging.py @@ -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