test_modes.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. """Tests for the assistant mode state machine."""
  2. from stt_daemon.assistant.modes import Mode, ModeMachine
  3. def test_initial_mode_is_idle():
  4. assert ModeMachine().mode is Mode.IDLE
  5. def test_arm_execute_finish_cycle():
  6. machine = ModeMachine()
  7. assert machine.arm() is True
  8. assert machine.mode is Mode.COMMAND_ARMED
  9. assert machine.execute() is True
  10. assert machine.mode is Mode.EXECUTING
  11. assert machine.finish() is True
  12. assert machine.mode is Mode.IDLE
  13. def test_cancel_from_armed_returns_to_idle():
  14. machine = ModeMachine()
  15. machine.arm()
  16. assert machine.cancel() is True
  17. assert machine.mode is Mode.IDLE
  18. def test_chat_enter_exit_cycle():
  19. machine = ModeMachine()
  20. assert machine.enter_chat() is True
  21. assert machine.mode is Mode.CHAT
  22. assert machine.exit_chat() is True
  23. assert machine.mode is Mode.IDLE
  24. def test_cannot_enter_chat_while_command_active():
  25. machine = ModeMachine()
  26. machine.arm()
  27. assert machine.enter_chat() is False
  28. assert machine.mode is Mode.COMMAND_ARMED
  29. machine.execute()
  30. assert machine.enter_chat() is False
  31. assert machine.mode is Mode.EXECUTING
  32. def test_cannot_arm_while_in_chat():
  33. machine = ModeMachine()
  34. machine.enter_chat()
  35. assert machine.arm() is False
  36. assert machine.mode is Mode.CHAT
  37. def test_refusals_leave_mode_unchanged():
  38. machine = ModeMachine()
  39. assert machine.execute() is False
  40. assert machine.cancel() is False
  41. assert machine.finish() is False
  42. assert machine.exit_chat() is False
  43. assert machine.mode is Mode.IDLE
  44. def test_command_active_property():
  45. machine = ModeMachine()
  46. assert machine.command_active is False
  47. machine.arm()
  48. assert machine.command_active is True
  49. machine.execute()
  50. assert machine.command_active is True
  51. machine.finish()
  52. assert machine.command_active is False
  53. machine.enter_chat()
  54. assert machine.command_active is False