"""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