|
| 1 | +from unittest.mock import mock_open, patch |
| 2 | + |
1 | 3 | import pytest |
2 | 4 |
|
3 | 5 | from commitizen.cz.conventional_commits.conventional_commits import ( |
4 | 6 | ConventionalCommitsCz, |
5 | 7 | parse_scope, |
6 | 8 | parse_subject, |
7 | 9 | ) |
| 10 | +from commitizen.cz.conventional_commits.translation_multilanguage import ( |
| 11 | + FILENAME, |
| 12 | + MULTILANGUAGE, |
| 13 | + generate_key, |
| 14 | + load_multilanguage, |
| 15 | + save_multilanguage, |
| 16 | + translate_text, |
| 17 | + translate_text_from_eng, |
| 18 | +) |
8 | 19 | from commitizen.cz.exceptions import AnswerRequiredError |
9 | 20 |
|
10 | 21 | valid_scopes = ["", "simple", "dash-separated", "camelCase" "UPPERCASE"] |
@@ -153,3 +164,83 @@ def test_process_commit(commit_message, expected_message, config): |
153 | 164 | conventional_commits = ConventionalCommitsCz(config) |
154 | 165 | message = conventional_commits.process_commit(commit_message) |
155 | 166 | assert message == expected_message |
| 167 | + |
| 168 | + |
| 169 | +def test_load_multilanguage(): |
| 170 | + mock_data = "hello_en=hello\nworld_fr=monde\n" |
| 171 | + |
| 172 | + file = "builtins.open" |
| 173 | + with patch(file, mock_open(read_data=mock_data)): |
| 174 | + MULTILANGUAGE = load_multilanguage(file) |
| 175 | + |
| 176 | + assert MULTILANGUAGE == {"hello_en": "hello", "world_fr": "monde"} |
| 177 | + |
| 178 | + |
| 179 | +def test_save_multilanguage(): |
| 180 | + key = "hello_fr" |
| 181 | + value = "bonjour" |
| 182 | + with patch("builtins.open", mock_open()) as mocked_file: |
| 183 | + save_multilanguage(key, value) |
| 184 | + mocked_file.assert_called_once_with(FILENAME, "a") |
| 185 | + mocked_file().write.assert_called_once_with(f"{key}={value}\n") |
| 186 | + |
| 187 | + |
| 188 | +def test_generate_key(): |
| 189 | + original_key = "hello" |
| 190 | + to_lang = "fr" |
| 191 | + expected_key = "hello_fr" |
| 192 | + assert generate_key(original_key, to_lang) == expected_key |
| 193 | + |
| 194 | + |
| 195 | +def test_translate_text_error(): |
| 196 | + with patch("translate.Translator") as MockTranslator: |
| 197 | + mock_translator = MockTranslator.return_value |
| 198 | + mock_translator.translate.return_value = "IS AN INVALID TARGET LANGUAGE" |
| 199 | + |
| 200 | + text = "hello" |
| 201 | + from_lang = "en" |
| 202 | + to_lang = "xx" # Langue invalid |
| 203 | + translated = translate_text(text, from_lang, to_lang) |
| 204 | + |
| 205 | + assert translated == text |
| 206 | + |
| 207 | + |
| 208 | +def test_translate_text_from_eng_default_language(): |
| 209 | + text = "hello" |
| 210 | + to_lang = "en" |
| 211 | + key = "hello" |
| 212 | + |
| 213 | + translated = translate_text_from_eng(text, to_lang, key) |
| 214 | + |
| 215 | + # La langue de destination est l'anglais, donc le texte doit être renvoyé tel quel |
| 216 | + assert translated == "hello" |
| 217 | + |
| 218 | + |
| 219 | +def test_translate_text_with_is_translating_false(): |
| 220 | + global IS_TRANSLATING |
| 221 | + IS_TRANSLATING = False # Simuler que la traduction est désactivée |
| 222 | + |
| 223 | + text = "hello" |
| 224 | + from_lang = "en" |
| 225 | + to_lang = "fr" |
| 226 | + |
| 227 | + translated = translate_text(text, from_lang, to_lang) |
| 228 | + |
| 229 | + # IS_TRANSLATING est False, donc le texte doit être retourné sans modification |
| 230 | + assert translated == text |
| 231 | + |
| 232 | + |
| 233 | +def test_load_multilanguage_empty_file(): |
| 234 | + with patch("builtins.open", mock_open(read_data="")): |
| 235 | + load_multilanguage() |
| 236 | + assert MULTILANGUAGE == {} |
| 237 | + |
| 238 | + |
| 239 | +def test_load_multilanguage_malformed_file(): |
| 240 | + malformed_data = "hello=bonjour\ninvalid-line\nworld=monde\n" |
| 241 | + file = "builtins.open" |
| 242 | + with patch(file, mock_open(read_data=malformed_data)): |
| 243 | + MULTILANGUAGE = load_multilanguage(file) |
| 244 | + |
| 245 | + # Devrait ignorer les lignes malformées |
| 246 | + assert MULTILANGUAGE == {"hello": "bonjour", "world": "monde"} |
0 commit comments