from unittest.mock import MagicMock, patch from aarecommon.models.beamline import MXBeamline from aare.devices.experimental_hutch_shutter import ExperimentalHutchShutter @patch("aare.devices.experimental_hutch_shutter.PV") def test_shutter_init(mock_pv): ExperimentalHutchShutter(MXBeamline.X06DA) assert mock_pv.call_count == 3 # Check if PV names are correct args = [call.args[0] for call in mock_pv.call_args_list] assert "X06DA-EH1-PSYS:SH-A-CLOSE-SET" in args assert "X06DA-EH1-PSYS:SH-A-OPEN-SET" in args assert "X06DA-OP-PSH1-EMLS-0010:OPEN" in args @patch("aare.devices.experimental_hutch_shutter.PV") def test_shutter_state(mock_pv): # Mocking self._state mock_state_pv = MagicMock() mock_pv.side_effect = [MagicMock(), MagicMock(), mock_state_pv] shutter = ExperimentalHutchShutter(MXBeamline.X06DA) mock_state_pv.get.return_value = "Open" assert shutter.state() is True mock_state_pv.get.return_value = 1 assert shutter.state() is True mock_state_pv.get.return_value = "Not Open" assert shutter.state() is False mock_state_pv.get.return_value = 0 assert shutter.state() is False mock_state_pv.get.return_value = "Unknown" assert shutter.state() is False @patch("aare.devices.experimental_hutch_shutter.PV") def test_shutter_open_close(mock_pv): mock_close = MagicMock() mock_open = MagicMock() mock_state = MagicMock() mock_pv.side_effect = [mock_close, mock_open, mock_state] shutter = ExperimentalHutchShutter(MXBeamline.X06DA) shutter.open() assert mock_open.put.call_count == 3 mock_open.put.assert_any_call(0) mock_open.put.assert_any_call(1) shutter.close() assert mock_close.put.call_count == 2 mock_close.put.assert_any_call(1) mock_close.put.assert_any_call(0)