from __future__ import annotations from backup_tool.execution import ( ACTIVE_STATES, TERMINAL_STATES, TransitionError, transition, ) def test_transitions_are_monotonic_and_terminal_states_cannot_change() -> None: assert transition("queued", "preparing") == "preparing" assert transition("preparing", "running") == "running" assert transition("running", "verifying") == "verifying" assert transition("verifying", "committed") == "committed" assert "committed" in TERMINAL_STATES assert "queued" in ACTIVE_STATES try: transition("committed", "cancelled") except TransitionError as error: assert error.code == "invalid_transition" else: raise AssertionError("terminal execution changed state") def test_cancellation_is_cooperative() -> None: assert transition("running", "cancelling") == "cancelling" assert transition("cancelling", "cancelled") == "cancelled"