143 lines
4.4 KiB
Python
143 lines
4.4 KiB
Python
"""Tests for configuration."""
|
|
|
|
import pytest
|
|
|
|
from i18n_guardian.config import Config, ConfigLoader, generate_default_config
|
|
|
|
|
|
class TestConfig:
|
|
"""Tests for Config class."""
|
|
|
|
def test_default_values(self):
|
|
"""Test default configuration values."""
|
|
config = Config()
|
|
|
|
assert config.i18n_library is None
|
|
assert config.i18n_functions == []
|
|
assert config.min_string_length == 3
|
|
assert config.key_style == "snake_case"
|
|
assert config.output_format == "text"
|
|
assert config.fail_level == "error"
|
|
|
|
def test_from_dict(self):
|
|
"""Test creating config from dictionary."""
|
|
data = {
|
|
"i18n_library": "react-intl",
|
|
"min_string_length": 5,
|
|
"key_style": "kebab-case",
|
|
"i18n_functions": ["formatMessage", "t"],
|
|
}
|
|
|
|
config = Config.from_dict(data)
|
|
|
|
assert config.i18n_library == "react-intl"
|
|
assert config.min_string_length == 5
|
|
assert config.key_style == "kebab-case"
|
|
assert "formatMessage" in config.i18n_functions
|
|
|
|
def test_to_dict(self):
|
|
"""Test converting config to dictionary."""
|
|
config = Config(
|
|
i18n_library="i18next",
|
|
min_string_length=4,
|
|
key_style="camelCase",
|
|
)
|
|
|
|
data = config.to_dict()
|
|
|
|
assert data["i18n_library"] == "i18next"
|
|
assert data["min_string_length"] == 4
|
|
assert data["key_style"] == "camelCase"
|
|
|
|
def test_include_patterns(self):
|
|
"""Test include patterns."""
|
|
config = Config(
|
|
include_patterns=["**/*.js", "**/*.ts", "**/*.jsx"],
|
|
)
|
|
|
|
assert ".js" in config.include_patterns[0] or "*.js" in str(config.include_patterns)
|
|
|
|
def test_exclude_patterns(self):
|
|
"""Test exclude patterns."""
|
|
config = Config(
|
|
exclude_patterns=["**/node_modules/**", "**/.git/**"],
|
|
)
|
|
|
|
assert len(config.exclude_patterns) == 2
|
|
|
|
|
|
class TestConfigLoader:
|
|
"""Tests for ConfigLoader."""
|
|
|
|
def test_load_default_config(self, temp_dir):
|
|
"""Test loading with no config file."""
|
|
loader = ConfigLoader()
|
|
config = loader.load(None, str(temp_dir))
|
|
|
|
assert config.path == str(temp_dir)
|
|
assert isinstance(config, Config)
|
|
|
|
def test_load_from_file(self, sample_config_file):
|
|
"""Test loading configuration from file."""
|
|
loader = ConfigLoader()
|
|
config = loader.load(str(sample_config_file), str(sample_config_file.parent))
|
|
|
|
assert config.i18n_library == "react-intl"
|
|
assert config.min_string_length == 3
|
|
|
|
def test_load_invalid_yaml(self, temp_dir):
|
|
"""Test handling of invalid YAML."""
|
|
yaml_file = temp_dir / ".i18n-guardian.yaml"
|
|
yaml_file.write_text("invalid: yaml: content: [", encoding="utf-8")
|
|
|
|
loader = ConfigLoader()
|
|
|
|
with pytest.raises(ValueError):
|
|
loader.load(str(yaml_file), str(temp_dir))
|
|
|
|
def test_save_config(self, temp_dir):
|
|
"""Test saving configuration."""
|
|
loader = ConfigLoader()
|
|
config = Config(i18n_library="vue-i18n")
|
|
output_path = temp_dir / "output.yaml"
|
|
|
|
loader.save(config, str(output_path))
|
|
|
|
assert output_path.exists()
|
|
|
|
def test_load_missing_file(self, temp_dir):
|
|
"""Test loading when file doesn't exist."""
|
|
loader = ConfigLoader()
|
|
config = loader.load("/nonexistent/file.yaml", str(temp_dir))
|
|
|
|
assert config is not None
|
|
|
|
|
|
class TestGenerateDefaultConfig:
|
|
"""Tests for default config generation."""
|
|
|
|
def test_generate_default(self):
|
|
"""Test generating default configuration."""
|
|
config = generate_default_config()
|
|
|
|
assert "i18n_library" in config
|
|
assert "min_string_length" in config
|
|
assert "key_style" in config
|
|
assert "exclude_patterns" in config
|
|
assert isinstance(config["exclude_patterns"], list)
|
|
|
|
def test_default_exclude_patterns(self):
|
|
"""Test default exclude patterns."""
|
|
config = generate_default_config()
|
|
|
|
assert "**/node_modules/**" in config["exclude_patterns"]
|
|
assert "**/.git/**" in config["exclude_patterns"]
|
|
|
|
def test_default_include_patterns(self):
|
|
"""Test default include patterns."""
|
|
config = generate_default_config()
|
|
|
|
assert "**/*.py" in config["include_patterns"]
|
|
assert "**/*.js" in config["include_patterns"]
|
|
assert "**/*.ts" in config["include_patterns"]
|