import importlib.util from unittest.mock import patch import numpy as np import pytest from aare.beamline_dispatch.beamline_dispatch import get_beamline_dispatch from aare.beamline_dispatch.simulated import SimulatedDispatch from aare.beamline_dispatch.x06da import X06daDispatch from aare.beamline_dispatch.x10sa import X10saDispatch def test_dispatch_cannot_be_instantiated_without_env(): with patch.dict("os.environ", {}, clear=True), pytest.raises(ValueError) as e: _ = get_beamline_dispatch() assert e.match("Please set the BEAMLINE environment variable") def test_simulated_dispatch_can_be_instantiated(): with patch.dict("os.environ", {"BEAMLINE": "SIMULATED"}): dispatch = get_beamline_dispatch() assert isinstance(dispatch, SimulatedDispatch) @pytest.mark.skipif(importlib.util.find_spec("pxi_bec") is None, reason="run only for pxi flavour") def test_pxi_dispatch_can_be_instantiated(): with patch.dict("os.environ", {"BEAMLINE": "X06SA"}), pytest.raises(TypeError) as e: _ = get_beamline_dispatch() assert e.match("Can't instantiate abstract class") @pytest.mark.skipif( importlib.util.find_spec("pxii_bec") is None, reason="run only for pxii flavour" ) def test_pxii_dispatch_can_be_instantiated(): with patch.dict("os.environ", {"BEAMLINE": "X10SA"}): dispatch = get_beamline_dispatch() assert isinstance(dispatch, X10saDispatch) @pytest.mark.skipif( importlib.util.find_spec("pxii_bec") is None, reason="run only for pxii flavour" ) def test_pxii_dispatch_beam_center(): with patch.dict("os.environ", {"BEAMLINE": "X10SA"}): dispatch = get_beamline_dispatch() beam_center = dispatch.geo.beam_centre_model.predict(300, 62) assert np.isclose(beam_center[0][0], 2081.8, atol=1) assert np.isclose(beam_center[1][0], 2242.05, atol=1) @pytest.mark.skipif( importlib.util.find_spec("pxii_bec") is None, reason="run only for pxii flavour" ) def test_poni_rot_is_0(): with patch.dict("os.environ", {"BEAMLINE": "X10SA"}): dispatch = get_beamline_dispatch() assert dispatch.geo.detector_tilt == (0, 0) @pytest.mark.skipif( importlib.util.find_spec("pxiii_bec") is None, reason="run only for pxiii flavour" ) def test_pxiii_dispatch_can_be_instantiated(): with patch.dict("os.environ", {"BEAMLINE": "X06DA"}): dispatch = get_beamline_dispatch() assert isinstance(dispatch, X06daDispatch) @pytest.mark.skipif( importlib.util.find_spec("pxiii_bec") is None, reason="run only for pxiii flavour" ) def test_poni_rot_is_not_0(): with patch.dict("os.environ", {"BEAMLINE": "X06DA"}): dispatch = get_beamline_dispatch() assert dispatch.geo.detector_tilt != (0, 0)