Files
030-nato-phonetic-alphabet/tests/application/test_phonetic.py
T
Tirsvad 80ec1bc364 MIL-002 NATO converter: modelling, converter code, tests and Doxygen comments
User story, use case and SSD for "spell a word"; spell_word with
try/except KeyError, generate_phonetic with the retry loop, console and CSV
adapters, 49 pytest tests; MIL-002 and the modelling documents accepted with
review records.

Task: MIL-002#1
Task: MIL-002#2
Task: MIL-002#3
Task: MIL-002#4
Task: MIL-002#5
Task: MIL-002#6
2026-10-14 19:35:08 +08:00

50 lines
1.4 KiB
Python

import pytest
from nato_phonetic_alphabet.application.phonetic import generate_phonetic
from nato_phonetic_alphabet.application.ports import InputClosedError
ALPHABET = {"A": "Alfa", "B": "Bravo"}
class FakeConsole:
def __init__(self, words: list[str]) -> None:
self._words = words
self.asked = 0
self.invalid = 0
def ask_word(self) -> str:
self.asked += 1
if not self._words:
raise InputClosedError
return self._words.pop(0)
def show_invalid(self) -> None:
self.invalid += 1
def show_code_words(self, code_words: list[str]) -> None:
raise AssertionError("generate_phonetic must not print the result")
def test_generate_phonetic_returns_code_words_for_valid_word() -> None:
console = FakeConsole(["ab"])
assert generate_phonetic(ALPHABET, console) == ["Alfa", "Bravo"]
assert console.asked == 1
assert console.invalid == 0
def test_generate_phonetic_asks_again_after_invalid_words() -> None:
console = FakeConsole(["a1", "", "b"])
assert generate_phonetic(ALPHABET, console) == ["Bravo"]
assert console.invalid == 2
assert console.asked == 3
def test_generate_phonetic_lets_closed_input_escape() -> None:
console = FakeConsole(["x"])
with pytest.raises(InputClosedError):
generate_phonetic(ALPHABET, console)
assert console.invalid == 1