Files
AareDAQ/tests/unit/daq/test_tell_state_updater.py
perl_d b0863e5ddb
Build and Publish / test (pull_request) Failing after 1m23s
Build and Publish / build (pull_request) Skipped
Build and Publish / Build and Deploy Docs (pull_request) Skipped
style: format with ruff
2026-07-06 11:53:49 +02:00

154 lines
6.2 KiB
Python

from aarecommon.models.tell import TellActivityEnum, TellPhaseEnum
from aare.daq.tell_state_machine import advance_tell_state, initial_tell_state
def test_mount_with_auto_unmount_uses_internal_phases():
state = initial_tell_state()
state = advance_tell_state(
state, "shell", 'mount("F", 2, 1, force=1, read_dm=0, auto_unmount=1)'
)
assert state.activity == TellActivityEnum.MOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.PREPARING
assert state.sample_position == "F2-1"
assert state.mount_success is None
state = advance_tell_state(state, "shell", "got result True")
assert state.activity == TellActivityEnum.MOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.PREPARING
assert state.mount_success is None
state = advance_tell_state(state, "shell", "unmount: None None None True")
assert state.activity == TellActivityEnum.UNMOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.AUTO_UNMOUNT
state = advance_tell_state(state, "Motion Sync", "Sample get from Gonio")
assert state.activity == TellActivityEnum.UNMOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.RETURNING_OLD_SAMPLE
state = advance_tell_state(state, "Motion Sync", "Sample put on Puck")
assert state.activity == TellActivityEnum.UNMOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.OLD_SAMPLE_RETURNED
state = advance_tell_state(state, "Motion Sync", "Sample get on Puck")
assert state.activity == TellActivityEnum.MOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.PICKING_NEW_SAMPLE
state = advance_tell_state(state, "Motion Sync", "Sample put on Gonio")
assert state.activity == TellActivityEnum.MOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.PLACING_NEW_SAMPLE
state = advance_tell_state(state, "Motion Sync", "Robot Clear after mount")
assert state.activity == TellActivityEnum.MOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.FINALIZING
state = advance_tell_state(state, "shell", "setting mounted sample to F2-1")
assert state.activity == TellActivityEnum.MOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.COMPLETE
assert state.sample_position == "F2-1"
assert state.mount_success is True
state = advance_tell_state(state, "state", "Ready")
assert state.activity == TellActivityEnum.IDLE
assert state.operation == "idle"
assert state.phase == TellPhaseEnum.IDLE
assert state.message == "Ready"
def test_plain_unmount_reaches_complete_before_ready():
state = initial_tell_state()
state = advance_tell_state(state, "shell", "unmount()")
assert state.activity == TellActivityEnum.UNMOUNTING
assert state.operation == "unmount"
assert state.phase == TellPhaseEnum.PREPARING
state = advance_tell_state(state, "Motion Sync", "Sample get from Gonio")
assert state.phase == TellPhaseEnum.RETURNING_OLD_SAMPLE
state = advance_tell_state(state, "Motion Sync", "Sample put on Puck")
assert state.phase == TellPhaseEnum.COMPLETE
assert state.mount_success is True
state = advance_tell_state(state, "state", "Ready")
assert state.activity == TellActivityEnum.IDLE
assert state.operation == "idle"
assert state.phase == TellPhaseEnum.IDLE
def test_gripper_detection_moves_to_failed_phase():
state = initial_tell_state()
state = advance_tell_state(state, "shell", 'mount("F", 2, 1)')
state = advance_tell_state(state, "Gripper detection", "Pin is lost")
assert state.activity == TellActivityEnum.ERROR
assert state.phase == TellPhaseEnum.FAILED
assert state.mount_success is False
assert state.mount_error == "Pin is lost"
def test_got_result_false_during_auto_unmount_is_not_error():
state = initial_tell_state()
state = advance_tell_state(
state, "shell", 'mount("D", 5, 14, force=1, read_dm=0, auto_unmount=1)'
)
assert state.activity == TellActivityEnum.MOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.PREPARING
state = advance_tell_state(state, "shell", "unmount: None None None True")
assert state.activity == TellActivityEnum.UNMOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.AUTO_UNMOUNT
state = advance_tell_state(state, "Motion Sync", "Sample get from Gonio")
assert state.activity == TellActivityEnum.UNMOUNTING
assert state.phase == TellPhaseEnum.RETURNING_OLD_SAMPLE
state = advance_tell_state(state, "shell", "got result False")
assert state.activity == TellActivityEnum.UNMOUNTING
assert state.operation == "mount"
assert state.phase == TellPhaseEnum.RETURNING_OLD_SAMPLE
assert state.mount_success is None
assert state.mount_error in (None, "")
state = advance_tell_state(state, "Motion Sync", "Sample put on Puck")
assert state.activity == TellActivityEnum.UNMOUNTING
assert state.phase == TellPhaseEnum.OLD_SAMPLE_RETURNED
state = advance_tell_state(state, "Motion Sync", "Sample get on Puck")
assert state.activity == TellActivityEnum.MOUNTING
assert state.phase == TellPhaseEnum.PICKING_NEW_SAMPLE
def test_mount_phase_after_old_sample_returned_confirms_auto_unmount_completed():
state = initial_tell_state()
state = advance_tell_state(
state, "shell", 'mount("F", 2, 1, force=1, read_dm=0, auto_unmount=1)'
)
state = advance_tell_state(state, "shell", "unmount: None None None True")
state = advance_tell_state(state, "Motion Sync", "Sample get from Gonio")
state = advance_tell_state(state, "Motion Sync", "Sample put on Puck")
assert state.phase == TellPhaseEnum.OLD_SAMPLE_RETURNED
state = advance_tell_state(state, "Motion Sync", "Sample get on Puck")
assert state.phase == TellPhaseEnum.PICKING_NEW_SAMPLE
state = advance_tell_state(state, "Motion Sync", "Sample put on Gonio")
assert state.phase == TellPhaseEnum.PLACING_NEW_SAMPLE
state = advance_tell_state(state, "Motion Sync", "Robot Clear after mount")
assert state.phase == TellPhaseEnum.FINALIZING