Skip to content

Commit

Permalink
Update test_door_ungrip_labware().
Browse files Browse the repository at this point in the history
  • Loading branch information
SyntaxColoring committed Oct 5, 2024
1 parent 9056123 commit f4562bc
Showing 1 changed file with 35 additions and 41 deletions.
76 changes: 35 additions & 41 deletions api/tests/opentrons/protocol_engine/state/test_command_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -557,8 +557,9 @@ def test_door_during_error_recovery() -> None:
assert subject.state.failed_command_errors == [expected_error_occurance]


def test_door_ungrip_labware() -> None:
"""Test behavior when the door is opened during error recovery ungrip."""
@pytest.mark.parametrize("close_door_before_queueing", [False, True])
def test_door_ungrip_labware(close_door_before_queueing: bool) -> None:
"""Ungrip commands should be able to run even when the door is open."""
subject = CommandStore(
is_door_open=False,
error_recovery_policy=_placeholder_error_recovery_policy,
Expand All @@ -572,68 +573,61 @@ def test_door_ungrip_labware() -> None:
subject_view = CommandView(subject.state)

# Fail a command to put the subject in recovery mode.
queue_1 = actions.QueueCommandAction(
queue_failing = actions.QueueCommandAction(
request=commands.CommentCreate(
params=commands.CommentParams(message=""), key="command-key-1"
),
request_hash=None,
created_at=datetime(year=2021, month=1, day=1),
command_id="command-id-1",
command_id="failing-command-id",
)
subject.handle_action(queue_1)
run_1 = actions.RunCommandAction(
command_id="command-id-1",
subject.handle_action(queue_failing)
run_failing = actions.RunCommandAction(
command_id="failing-command-id",
started_at=datetime(year=2022, month=2, day=2),
)
subject.handle_action(run_1)
subject.handle_action(run_failing)
expected_error = errors.ProtocolEngineError(message="oh no")
expected_error_occurance = errors.ErrorOccurrence(
id="error-id",
errorType="ProtocolEngineError",
createdAt=datetime(year=2023, month=3, day=3),
detail="oh no",
errorCode=ErrorCodes.GENERAL_ERROR.value.code,
)
fail_1 = actions.FailCommandAction(
command_id="command-id-1",
running_command=subject_view.get("command-id-1"),
fail_failing = actions.FailCommandAction(
command_id="failing-command-id",
running_command=subject_view.get("failing-command-id"),
error_id="error-id",
failed_at=datetime(year=2023, month=3, day=3),
error=expected_error,
notes=[],
type=ErrorRecoveryType.WAIT_FOR_RECOVERY,
)
subject.handle_action(fail_1)
subject.handle_action(fail_failing)

queue_2 = actions.QueueCommandAction(
# Open the door:
subject.handle_action(actions.DoorChangeAction(DoorState.OPEN))
assert (
subject_view.get_status() == EngineStatus.AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR
)
assert subject_view.get_next_to_execute() is None

if close_door_before_queueing:
subject.handle_action(actions.DoorChangeAction(DoorState.CLOSED))

assert subject_view.get_status() in (
EngineStatus.AWAITING_RECOVERY_PAUSED, # If we closed the door.
EngineStatus.AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, # If we didn't.
)

# Make sure the special ungrip command can be queued and that it will be returned
# as next to execute:
queue_fixit = actions.QueueCommandAction(
request=commands.unsafe.UnsafeUngripLabwareCreate(
params=commands.unsafe.UnsafeUngripLabwareParams(),
intent=CommandIntent.FIXIT,
),
request_hash=None,
created_at=datetime(year=2021, month=1, day=1),
command_id="command-id-2",
command_id="fixit-command-id",
)
subject.handle_action(queue_2)
assert subject_view.get_status() == EngineStatus.AWAITING_RECOVERY
assert subject_view.get_next_to_execute() == "command-id-2"

# Test state after we open the door:
subject.handle_action(actions.DoorChangeAction(DoorState.OPEN))
assert (
subject_view.get_status() == EngineStatus.AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR
)
assert subject_view.get_next_to_execute() == "command-id-2"
play = actions.PlayAction(requested_at=datetime.now())
action = subject_view.validate_action_allowed(play)

assert action == play

# Test state when we resume recovery mode:
subject.handle_action(play)
assert subject_view.get_status() == EngineStatus.AWAITING_RECOVERY
assert subject_view.get_next_to_execute() == "command-id-2"
assert subject.state.failed_command_errors == [expected_error_occurance]
subject_view.validate_action_allowed(queue_fixit)
subject.handle_action(queue_fixit)
assert subject_view.get_next_to_execute() == "fixit-command-id"


@pytest.mark.parametrize(
Expand Down

0 comments on commit f4562bc

Please sign in to comment.