import importlib.util from unittest.mock import patch 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("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)