Files
codexchange-cli/tests/test_config.py
7000pctAUTO cd5896ed46
Some checks failed
CI / test (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / typecheck (push) Has been cancelled
Add test suite (68 tests)
2026-01-30 19:00:44 +00:00

134 lines
4.1 KiB
Python

"""Tests for configuration module."""
import os
import tempfile
from pathlib import Path
import pytest
from codexchange.config import (
ConfigSettings,
get_config_path,
load_config,
save_config,
get_config,
)
class TestConfigSettings:
"""Tests for ConfigSettings model."""
def test_default_values(self):
"""Test that ConfigSettings has correct default values."""
config = ConfigSettings()
assert config.ollama_host == "http://localhost:11434"
assert config.default_model == "codellama"
assert config.timeout == 300
assert config.verbose is False
def test_custom_values(self):
"""Test that ConfigSettings accepts custom values."""
config = ConfigSettings(
ollama_host="http://ollama:11434",
default_model="llama2",
timeout=600,
verbose=True
)
assert config.ollama_host == "http://ollama:11434"
assert config.default_model == "llama2"
assert config.timeout == 600
assert config.verbose is True
class TestConfigPath:
"""Tests for configuration file path."""
def test_get_config_path(self):
"""Test that config path is in home directory."""
config_path = get_config_path()
assert config_path.name == ".codexchange.yaml"
assert config_path.parent == Path.home()
class TestLoadConfig:
"""Tests for loading configuration."""
def test_load_default_config(self):
"""Test loading config when file doesn't exist."""
with tempfile.TemporaryDirectory() as tmpdir:
config_path = Path(tmpdir) / "nonexistent.yaml"
config = load_config(config_path)
assert config.ollama_host == "http://localhost:11434"
assert config.default_model == "codellama"
def test_load_config_from_file(self):
"""Test loading config from YAML file."""
with tempfile.TemporaryDirectory() as tmpdir:
config_path = Path(tmpdir) / ".codexchange.yaml"
yaml_content = """
ollama_host: http://custom:11434
default_model: mistral
timeout: 600
verbose: true
"""
with open(config_path, "w") as f:
f.write(yaml_content)
config = load_config(config_path)
assert config.ollama_host == "http://custom:11434"
assert config.default_model == "mistral"
assert config.timeout == 600
assert config.verbose is True
class TestSaveConfig:
"""Tests for saving configuration."""
def test_save_config(self):
"""Test saving config to YAML file."""
with tempfile.TemporaryDirectory() as tmpdir:
config_path = Path(tmpdir) / ".codexchange.yaml"
config = ConfigSettings(
ollama_host="http://test:11434",
default_model="testmodel",
timeout=120
)
save_config(config, config_path)
assert config_path.exists()
with open(config_path, "r") as f:
content = f.read()
assert "http://test:11434" in content
assert "testmodel" in content
assert "120" in content
class TestGetConfig:
"""Tests for getting configuration with env overrides."""
def test_environment_override(self, monkeypatch):
"""Test that environment variables override config."""
monkeypatch.setenv("CODEXCHANGE_OLLAMA_HOST", "http://env-host:11434")
monkeypatch.setenv("CODEXCHANGE_DEFAULT_MODEL", "env-model")
monkeypatch.setenv("CODEXCHANGE_TIMEOUT", "900")
config = get_config()
assert config.ollama_host == "http://env-host:11434"
assert config.default_model == "env-model"
assert config.timeout == 900
def test_invalid_timeout_env(self, monkeypatch):
"""Test handling of invalid timeout environment variable."""
monkeypatch.setenv("CODEXCHANGE_TIMEOUT", "invalid")
config = get_config()
assert config.timeout == 300