test_main.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from unittest.mock import patch, call
  2. import pytest
  3. from src.main import run
  4. def test_repl_dispatches_known_command(capsys):
  5. inputs = iter(["help", KeyboardInterrupt()])
  6. def fake_input(prompt):
  7. val = next(inputs)
  8. if isinstance(val, KeyboardInterrupt):
  9. raise val
  10. return val
  11. with patch("src.main.input", fake_input):
  12. run()
  13. captured = capsys.readouterr()
  14. assert "welcome to the best testapp ever" in captured.out
  15. assert "Available commands" in captured.out
  16. def test_repl_unknown_command_prints_error(capsys):
  17. inputs = iter(["unknowncmd", KeyboardInterrupt()])
  18. def fake_input(prompt):
  19. val = next(inputs)
  20. if isinstance(val, KeyboardInterrupt):
  21. raise val
  22. return val
  23. with patch("src.main.input", fake_input):
  24. run()
  25. captured = capsys.readouterr()
  26. assert "Unknown command: unknowncmd" in captured.out
  27. assert "Type 'help' for available commands" in captured.out
  28. def test_repl_empty_input_is_ignored(capsys):
  29. inputs = iter(["", KeyboardInterrupt()])
  30. def fake_input(prompt):
  31. val = next(inputs)
  32. if isinstance(val, KeyboardInterrupt):
  33. raise val
  34. return val
  35. with patch("src.main.input", fake_input):
  36. run()
  37. captured = capsys.readouterr()
  38. # Welcome message present, no "Unknown command" line
  39. assert "welcome to the best testapp ever" in captured.out
  40. assert "Unknown command" not in captured.out
  41. def test_repl_input_is_case_insensitive(capsys):
  42. inputs = iter(["HELP", KeyboardInterrupt()])
  43. def fake_input(prompt):
  44. val = next(inputs)
  45. if isinstance(val, KeyboardInterrupt):
  46. raise val
  47. return val
  48. with patch("src.main.input", fake_input):
  49. run()
  50. captured = capsys.readouterr()
  51. assert "Available commands" in captured.out