156
tests/test_validate.py
Normal file
156
tests/test_validate.py
Normal file
@@ -0,0 +1,156 @@
|
||||
"""Tests for validation module."""
|
||||
|
||||
from i18n_key_sync.validate import ValidationResult, Validator
|
||||
|
||||
|
||||
class TestValidationResult:
|
||||
"""Tests for ValidationResult class."""
|
||||
|
||||
def test_validation_result_properties(self):
|
||||
"""Test ValidationResult property calculations."""
|
||||
result = ValidationResult(
|
||||
missing_keys={"key1", "key2"},
|
||||
unused_keys={"key3"},
|
||||
matching_keys={"key4", "key5"},
|
||||
)
|
||||
|
||||
assert result.total_missing == 2
|
||||
assert result.total_unused == 1
|
||||
assert result.total_matching == 2
|
||||
assert result.is_valid is False
|
||||
|
||||
def test_validation_result_valid(self):
|
||||
"""Test ValidationResult with no missing or unused keys."""
|
||||
result = ValidationResult(
|
||||
missing_keys=set(),
|
||||
unused_keys=set(),
|
||||
matching_keys={"key1", "key2"},
|
||||
)
|
||||
|
||||
assert result.total_missing == 0
|
||||
assert result.total_unused == 0
|
||||
assert result.is_valid is True
|
||||
|
||||
|
||||
class TestValidator:
|
||||
"""Tests for Validator class."""
|
||||
|
||||
def test_validate_all_matching(self):
|
||||
"""Test validation when all keys match."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2", "key3"}
|
||||
locale_keys = {"en": {"key1", "key2", "key3"}}
|
||||
|
||||
result = validator.validate(extracted_keys, locale_keys)
|
||||
|
||||
assert result.missing_keys == set()
|
||||
assert result.unused_keys == set()
|
||||
assert result.matching_keys == {"key1", "key2", "key3"}
|
||||
assert result.is_valid is True
|
||||
|
||||
def test_validate_missing_keys(self):
|
||||
"""Test validation with missing keys."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2", "key3"}
|
||||
locale_keys = {"en": {"key1", "key2"}}
|
||||
|
||||
result = validator.validate(extracted_keys, locale_keys)
|
||||
|
||||
assert result.missing_keys == {"key3"}
|
||||
assert result.unused_keys == set()
|
||||
assert result.matching_keys == {"key1", "key2"}
|
||||
assert result.is_valid is False
|
||||
|
||||
def test_validate_unused_keys(self):
|
||||
"""Test validation with unused keys."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2"}
|
||||
locale_keys = {"en": {"key1", "key2", "key3", "key4"}}
|
||||
|
||||
result = validator.validate(extracted_keys, locale_keys)
|
||||
|
||||
assert result.missing_keys == set()
|
||||
assert result.unused_keys == {"key3", "key4"}
|
||||
assert result.matching_keys == {"key1", "key2"}
|
||||
assert result.is_valid is False
|
||||
|
||||
def test_validate_missing_and_unused_keys(self):
|
||||
"""Test validation with both missing and unused keys."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2", "key3"}
|
||||
locale_keys = {"en": {"key1", "key4", "key5"}}
|
||||
|
||||
result = validator.validate(extracted_keys, locale_keys)
|
||||
|
||||
assert result.missing_keys == {"key2", "key3"}
|
||||
assert result.unused_keys == {"key4", "key5"}
|
||||
assert result.matching_keys == {"key1"}
|
||||
assert result.is_valid is False
|
||||
|
||||
def test_validate_multiple_locales(self):
|
||||
"""Test validation with multiple locales."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2"}
|
||||
locale_keys = {
|
||||
"en": {"key1", "key2"},
|
||||
"es": {"key1", "key2"},
|
||||
"fr": {"key1", "key2", "key3"},
|
||||
}
|
||||
|
||||
result = validator.validate(extracted_keys, locale_keys)
|
||||
|
||||
assert result.missing_keys == set()
|
||||
assert result.unused_keys == {"key3"}
|
||||
assert result.matching_keys == {"key1", "key2"}
|
||||
|
||||
def test_validate_empty_locale_keys(self):
|
||||
"""Test validation with empty locale keys dict."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2"}
|
||||
locale_keys = {}
|
||||
|
||||
result = validator.validate(extracted_keys, locale_keys)
|
||||
|
||||
assert result.missing_keys == {"key1", "key2"}
|
||||
assert result.unused_keys == set()
|
||||
assert result.matching_keys == set()
|
||||
assert result.is_valid is False
|
||||
|
||||
def test_validate_no_locale_files(self):
|
||||
"""Test validation when locale directory has no files."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2"}
|
||||
locale_keys = {"en": set(), "es": set()}
|
||||
|
||||
result = validator.validate(extracted_keys, locale_keys)
|
||||
|
||||
assert result.missing_keys == {"key1", "key2"}
|
||||
assert result.unused_keys == set()
|
||||
assert result.matching_keys == set()
|
||||
|
||||
def test_validate_for_locale(self):
|
||||
"""Test validation for a single locale."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2", "key3"}
|
||||
locale_keys = {"key1", "key2"}
|
||||
|
||||
result = validator.validate_for_locale(extracted_keys, locale_keys, "en")
|
||||
|
||||
assert result.missing_keys == {"key3"}
|
||||
assert result.unused_keys == set()
|
||||
assert result.matching_keys == {"key1", "key2"}
|
||||
|
||||
def test_get_summary(self):
|
||||
"""Test getting validation summary."""
|
||||
validator = Validator()
|
||||
extracted_keys = {"key1", "key2", "key3"}
|
||||
locale_keys = {"en": {"key1", "key2", "key4"}}
|
||||
|
||||
result = validator.validate(extracted_keys, locale_keys)
|
||||
summary = validator.get_summary(result)
|
||||
|
||||
assert summary["missing_keys"] == 1
|
||||
assert summary["unused_keys"] == 1
|
||||
assert summary["matching_keys"] == 2
|
||||
assert summary["total_keys_in_code"] == 3
|
||||
assert summary["total_keys_in_locale"] == 3
|
||||
Reference in New Issue
Block a user