from unittest.mock import patch, call import pytest from src.main import run def test_repl_dispatches_known_command(capsys): inputs = iter(["help", KeyboardInterrupt()]) def fake_input(prompt): val = next(inputs) if isinstance(val, KeyboardInterrupt): raise val return val with patch("src.main.input", fake_input): run() captured = capsys.readouterr() assert "welcome to the best testapp ever" in captured.out assert "Available commands" in captured.out def test_repl_unknown_command_prints_error(capsys): inputs = iter(["unknowncmd", KeyboardInterrupt()]) def fake_input(prompt): val = next(inputs) if isinstance(val, KeyboardInterrupt): raise val return val with patch("src.main.input", fake_input): run() captured = capsys.readouterr() assert "Unknown command: unknowncmd" in captured.out assert "Type 'help' for available commands" in captured.out def test_repl_empty_input_is_ignored(capsys): inputs = iter(["", KeyboardInterrupt()]) def fake_input(prompt): val = next(inputs) if isinstance(val, KeyboardInterrupt): raise val return val with patch("src.main.input", fake_input): run() captured = capsys.readouterr() # Welcome message present, no "Unknown command" line assert "welcome to the best testapp ever" in captured.out assert "Unknown command" not in captured.out def test_repl_input_is_case_insensitive(capsys): inputs = iter(["HELP", KeyboardInterrupt()]) def fake_input(prompt): val = next(inputs) if isinstance(val, KeyboardInterrupt): raise val return val with patch("src.main.input", fake_input): run() captured = capsys.readouterr() assert "Available commands" in captured.out