staking-deposit-cli/tests/test_utils/test_intl.py

72 lines
2.6 KiB
Python

import os
import pytest
from typing import (
List,
)
from eth2deposit.utils.constants import (
INTL_LANG_OPTIONS,
MNEMONIC_LANG_OPTIONS,
)
from eth2deposit.utils.intl import (
fuzzy_reverse_dict_lookup,
get_first_options,
load_text,
)
@pytest.mark.parametrize(
'params, file_path, func, lang, found_str', [
(['arg_mnemonic_language', 'prompt'], os.path.join('eth2deposit', 'cli', 'new_mnemonic.json'),
'new_mnemonic', 'en', 'Please choose your mnemonic language'),
(['arg_mnemonic_language', 'prompt'], os.path.join('eth2deposit', 'cli', 'new_mnemonic.json'),
'new_mnemonic', 'ja', 'ニーモニックの言語を選択してください'),
]
)
def test_load_text(params: List[str], file_path: str, func: str, lang: str, found_str: str) -> None:
assert found_str in load_text(params, file_path, func, lang)
@pytest.mark.parametrize(
'params, file_path, func, lang, valid', [
(['arg_mnemonic_language', 'prompt'], os.path.join('eth2deposit', 'cli', 'new_mnemonic.json'),
'new_mnemonic', 'zz', True), # invalid language, should revert to english
(['arg_mnemonic_language'], os.path.join('eth2deposit', 'cli', 'new_mnemonic.json'),
'new_mnemonic', 'en', False), # incomplete params
(['arg_mnemonic_language', 'prompt'], os.path.join('eth2deposit', 'cli', 'invalid.json'),
'new_mnemonic', 'en', False), # invalid json path
(['arg_mnemonic_language', 'prompt'], os.path.join('eth2deposit', 'cli', 'invalid.json'),
'new_mnemonic', 'zz', False), # invalid json path in invalid language
]
)
def test_load_text_en_fallover(params: List[str], file_path: str, func: str, lang: str, valid: bool) -> None:
if valid:
assert load_text(params, file_path, func, lang) == load_text(params, file_path, func, 'en')
else:
try:
load_text(params, file_path, func, lang)
except KeyError:
pass
else:
assert False
@pytest.mark.parametrize(
'options, first_options', [
({'a': ['a', 1], 'b': range(5), 'c': [chr(i) for i in range(65, 90)]}, ['a', 0, 'A']),
]
)
def test_get_first_options(options, first_options):
assert get_first_options(options) == first_options
@pytest.mark.parametrize(
'test, match, options', [
('English', 'english', MNEMONIC_LANG_OPTIONS),
('한국어', 'korean', MNEMONIC_LANG_OPTIONS),
('Roman', 'ro', INTL_LANG_OPTIONS),
]
)
def test_fuzzy_reverse_dict_lookup(test, match, options):
assert fuzzy_reverse_dict_lookup(test, options) == match