- Introduced user configuration command to set API key. - Updated README and documentation for user config and logging paths. - Refactored logging to support user-specific log files. - Added tests for user configuration and logging behavior.
73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
from pathlib import Path
|
|
|
|
from nexus_claude_api.logging_config import configure_logging, resolve_log_file
|
|
|
|
|
|
def test_configure_logging_writes_app_logs_to_file_without_console(
|
|
tmp_path,
|
|
capsys,
|
|
) -> None:
|
|
log_file = tmp_path / "nexus-claude-api.log"
|
|
logger = logging.getLogger("nexus_claude_api.routes.messages")
|
|
app_logger = logging.getLogger("nexus_claude_api")
|
|
original_handlers = app_logger.handlers[:]
|
|
original_level = app_logger.level
|
|
original_propagate = app_logger.propagate
|
|
|
|
try:
|
|
configure_logging(verbose=False, log_file=log_file)
|
|
|
|
logger.info("detailed app request")
|
|
logger.debug("debug details hidden without verbose")
|
|
|
|
output = capsys.readouterr()
|
|
log_text = log_file.read_text(encoding="utf-8")
|
|
assert output.err == ""
|
|
assert "detailed app request" in log_text
|
|
assert "debug details hidden without verbose" not in log_text
|
|
finally:
|
|
app_logger.handlers.clear()
|
|
app_logger.handlers.extend(original_handlers)
|
|
app_logger.setLevel(original_level)
|
|
app_logger.propagate = original_propagate
|
|
|
|
|
|
def test_configure_logging_verbose_writes_debug_app_logs_to_file(
|
|
tmp_path,
|
|
) -> None:
|
|
log_file = tmp_path / "nexus-claude-api.log"
|
|
logger = logging.getLogger("nexus_claude_api.routes.messages")
|
|
app_logger = logging.getLogger("nexus_claude_api")
|
|
original_handlers = app_logger.handlers[:]
|
|
original_level = app_logger.level
|
|
original_propagate = app_logger.propagate
|
|
|
|
try:
|
|
configure_logging(verbose=True, log_file=log_file)
|
|
|
|
logger.debug("debug details stay in file")
|
|
|
|
assert "debug details stay in file" in log_file.read_text(encoding="utf-8")
|
|
finally:
|
|
app_logger.handlers.clear()
|
|
app_logger.handlers.extend(original_handlers)
|
|
app_logger.setLevel(original_level)
|
|
app_logger.propagate = original_propagate
|
|
|
|
|
|
def test_resolve_log_file_uses_user_config_dir_by_default(
|
|
tmp_path,
|
|
monkeypatch,
|
|
) -> None:
|
|
user_config_dir = tmp_path / ".config" / "nexus-claude-api"
|
|
monkeypatch.setattr("nexus_claude_api.config.USER_CONFIG_DIR", user_config_dir)
|
|
|
|
assert resolve_log_file() == user_config_dir / "logs" / "nexus-claude-api.log"
|
|
|
|
|
|
def test_resolve_log_file_uses_local_logs_in_dev_mode() -> None:
|
|
assert resolve_log_file(dev=True) == Path("logs") / "nexus-claude-api.log"
|