44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import pytest
|
|
|
|
from nato_alphabet.adapters.csv_alphabet import load_nato_dict
|
|
from nato_alphabet.domain.spelling import InvalidWordError, generate_phonetic
|
|
|
|
ALPHABET = load_nato_dict()
|
|
LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
|
|
|
|
@pytest.mark.parametrize("letter", list(LETTERS))
|
|
def test_generate_phonetic_maps_letter_to_its_code_word(letter: str) -> None:
|
|
assert generate_phonetic(letter, ALPHABET) == [ALPHABET[letter]]
|
|
|
|
|
|
def test_generate_phonetic_uses_known_code_words() -> None:
|
|
assert generate_phonetic("ADZ", ALPHABET) == ["Alfa", "Delta", "Zulu"]
|
|
|
|
|
|
def test_generate_phonetic_covers_all_26_letters() -> None:
|
|
assert len(generate_phonetic(LETTERS, ALPHABET)) == len(LETTERS)
|
|
|
|
|
|
def test_generate_phonetic_is_case_insensitive_for_mixed_case() -> None:
|
|
assert generate_phonetic("Hello", ALPHABET) == [
|
|
"Hotel",
|
|
"Echo",
|
|
"Lima",
|
|
"Lima",
|
|
"Oscar",
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize("word", ["a1", "two words", "hi!", "", "ß", "æ"])
|
|
def test_generate_phonetic_raises_for_non_letter_or_empty(word: str) -> None:
|
|
with pytest.raises(InvalidWordError):
|
|
generate_phonetic(word, ALPHABET)
|
|
|
|
|
|
def test_generate_phonetic_keeps_cause_of_invalid_character() -> None:
|
|
with pytest.raises(InvalidWordError) as info:
|
|
generate_phonetic("a1", ALPHABET)
|
|
|
|
assert isinstance(info.value.__cause__, KeyError)
|