summaryrefslogtreecommitdiff
path: root/tests/test_state.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_state.py')
-rw-r--r--tests/test_state.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/test_state.py b/tests/test_state.py
new file mode 100644
index 0000000..9fd223c
--- /dev/null
+++ b/tests/test_state.py
@@ -0,0 +1,41 @@
+import unittest
+
+from parley.state import InvalidStateError, State, StateMachine
+
+
+class StateMachineTests(unittest.TestCase):
+ def test_record_transcribe_complete(self) -> None:
+ machine = StateMachine()
+ self.assertEqual(machine.start_recording(), State.RECORDING)
+ self.assertEqual(machine.begin_transcription(), State.TRANSCRIBING)
+ self.assertEqual(machine.complete(), State.IDLE)
+
+ def test_insertion_flow(self) -> None:
+ machine = StateMachine()
+ machine.start_recording()
+ machine.begin_transcription()
+ self.assertEqual(machine.begin_insertion(), State.INSERTING)
+ self.assertEqual(machine.complete(), State.IDLE)
+
+ def test_rejects_second_recording(self) -> None:
+ machine = StateMachine()
+ machine.start_recording()
+ with self.assertRaisesRegex(InvalidStateError, "current state is recording"):
+ machine.start_recording()
+
+ def test_cancel_recording_and_transcription(self) -> None:
+ machine = StateMachine()
+ machine.start_recording()
+ self.assertEqual(machine.cancel(), State.IDLE)
+ machine.start_recording()
+ machine.begin_transcription()
+ self.assertEqual(machine.cancel(), State.IDLE)
+
+ def test_error_is_recoverable(self) -> None:
+ machine = StateMachine()
+ machine.fail()
+ self.assertEqual(machine.start_recording(), State.RECORDING)
+
+
+if __name__ == "__main__":
+ unittest.main()