|
5 | 5 | import pytest |
6 | 6 | from bluesky import plan_stubs as bps |
7 | 7 | from bluesky.run_engine import RunEngine |
8 | | -from ophyd_async.core import init_devices, set_mock_value |
| 8 | +from ophyd_async.core import WatchableAsyncStatus, init_devices, set_mock_value |
9 | 9 |
|
10 | 10 | from dodal.devices.baton import Baton |
11 | 11 | from dodal.devices.xbpm_feedback import XBPMFeedback |
|
15 | 15 | async def fake_xbpm_feedback() -> XBPMFeedback: |
16 | 16 | async with init_devices(mock=True): |
17 | 17 | baton = Baton("BATON-01:") |
18 | | - xbpm_feedback = XBPMFeedback("", baton=baton) |
| 18 | + xbpm_feedback = XBPMFeedback("", baton=baton, name="xbpm_feedback") |
19 | 19 | return xbpm_feedback |
20 | 20 |
|
21 | 21 |
|
@@ -108,3 +108,33 @@ def test_xbpm_feedback_does_not_wait_if_commissioning_mode_enabled( |
108 | 108 | run_engine(bps.trigger(xbpm_feedback_in_commissioning_mode, wait=True)) |
109 | 109 | mock_periodic_reminder.assert_not_called() |
110 | 110 | mock_observe_value.assert_not_called() |
| 111 | + |
| 112 | + |
| 113 | +async def test_xbpm_feedback_trigger_is_watchable( |
| 114 | + fake_xbpm_feedback: XBPMFeedback, |
| 115 | + run_engine: RunEngine, |
| 116 | +): |
| 117 | + set_mock_value(fake_xbpm_feedback.pos_stable, False) |
| 118 | + received_events = [] |
| 119 | + |
| 120 | + def on_event(**kwargs): |
| 121 | + received_events.append(kwargs) |
| 122 | + if kwargs.get("current") == 0: |
| 123 | + set_mock_value(fake_xbpm_feedback.pos_stable, True) |
| 124 | + |
| 125 | + def wait_for_feedback(): |
| 126 | + status = yield from bps.trigger(fake_xbpm_feedback, wait=False) |
| 127 | + assert isinstance(status, WatchableAsyncStatus) |
| 128 | + status.watch(on_event) # type: ignore |
| 129 | + yield from bps.wait(timeout=1) |
| 130 | + |
| 131 | + run_engine(wait_for_feedback()) |
| 132 | + |
| 133 | + assert received_events[0]["name"] == "xbpm_feedback-pos_stable" |
| 134 | + assert received_events[0]["current"] == 0 |
| 135 | + assert received_events[0]["initial"] == 0 |
| 136 | + assert received_events[0]["target"] == 1 |
| 137 | + assert received_events[1]["name"] == "xbpm_feedback-pos_stable" |
| 138 | + assert received_events[1]["current"] == 1 |
| 139 | + assert received_events[1]["initial"] == 0 |
| 140 | + assert received_events[1]["target"] == 1 |
0 commit comments