55from dodal .beamlines import i02_1
66from dodal .beamlines .i02_1 import ZebraFastGridScanTwoD
77from dodal .devices .attenuator .attenuator import ReadOnlyAttenuator
8+ from dodal .devices .beamlines .i02_1 .flux import Flux
89from dodal .devices .common_dcm import DoubleCrystalMonochromatorBase
910from dodal .devices .eiger import EigerDetector
10- from dodal .devices .flux import Flux
11- from dodal .devices .s4_slit_gaps import S4SlitGaps
11+ from dodal .devices .slits import Slits
1212from dodal .devices .synchrotron import Synchrotron
1313from dodal .devices .undulator import BaseUndulator
1414from dodal .devices .zebra .zebra import Zebra
1515from pydantic import ValidationError
1616
1717from mx_bluesky .beamlines .i02_1 .composites import I02_1FgsParams
1818from mx_bluesky .beamlines .i02_1 .i02_1_gridscan_plan import (
19+ ExternalGridScanParams ,
1920 FlyScanXRayCentreComposite ,
2021 construct_i02_1_specific_features ,
2122 i02_1_gridscan_plan ,
@@ -42,6 +43,44 @@ def zebra_fgs_two_d() -> ZebraFastGridScanTwoD:
4243 return device
4344
4445
46+ @pytest .fixture
47+ def entry_params (tmp_path ) -> ExternalGridScanParams :
48+ return ExternalGridScanParams (
49+ visit = "visit" ,
50+ file_name = "file_name" ,
51+ storage_directory = str (tmp_path ),
52+ exposure_time_s = 0.004 ,
53+ snapshot_directory = tmp_path ,
54+ x_start_um = 0 ,
55+ y_start_um = 0 ,
56+ z_start_um = 0 ,
57+ x_steps = 5 ,
58+ y_steps = 5 ,
59+ beam_size_x = 5 ,
60+ beam_size_y = 5 ,
61+ microns_per_pixel_x = 1 ,
62+ microns_per_pixel_y = 1 ,
63+ upper_left_x = 1 ,
64+ upper_left_y = 2 ,
65+ detector_distance_mm = 100 ,
66+ sample_id = 1 ,
67+ )
68+
69+
70+ @pytest .fixture
71+ def slits () -> Slits :
72+ device = i02_1 .s4_slit_gaps .build (connect_immediately = True , mock = True )
73+
74+ return device
75+
76+
77+ @pytest .fixture
78+ def flux () -> Flux :
79+ device = i02_1 .flux .build (connect_immediately = True , mock = True )
80+
81+ return device
82+
83+
4584@pytest .fixture
4685def fgs_composite (
4786 eiger : EigerDetector ,
@@ -52,7 +91,7 @@ def fgs_composite(
5291 attenuator : ReadOnlyAttenuator ,
5392 flux : Flux ,
5493 undulator : BaseUndulator ,
55- s4_slit_gaps : S4SlitGaps ,
94+ slits : Slits ,
5695 zebra : Zebra ,
5796) -> FlyScanXRayCentreComposite :
5897 return FlyScanXRayCentreComposite (
@@ -65,7 +104,7 @@ def fgs_composite(
65104 attenuator ,
66105 flux ,
67106 undulator ,
68- s4_slit_gaps ,
107+ slits ,
69108 )
70109
71110
@@ -132,36 +171,43 @@ def test_i02_1_flyscan_xray_centre_in_re(
132171 run_engine : RunEngine ,
133172 fgs_params_two_d : I02_1FgsParams ,
134173 fgs_composite : FlyScanXRayCentreComposite ,
174+ entry_params : ExternalGridScanParams ,
135175):
136176 expected_features = construct_i02_1_specific_features (
137177 fgs_composite , fgs_params_two_d
138178 )
139179
140180 mock_create_features .return_value = expected_features
141- run_engine (i02_1_gridscan_plan (fgs_params_two_d , fgs_composite ))
181+ run_engine (i02_1_gridscan_plan (entry_params , fgs_composite ))
142182 mock_common_scan .assert_called_once_with (
143183 fgs_composite , fgs_params_two_d , expected_features
144184 )
145185
146186
147- @patch (
148- "mx_bluesky.beamlines.i02_1.i02_1_gridscan_plan.construct_i02_1_specific_features" ,
149- )
150187@patch (
151188 "mx_bluesky.beamlines.i02_1.i02_1_gridscan_plan.common_flyscan_xray_centre" ,
152189 new = MagicMock (),
153190)
191+ @patch (
192+ "mx_bluesky.beamlines.i02_1.i02_1_gridscan_plan.get_internal_params" ,
193+ )
194+ @patch (
195+ "mx_bluesky.beamlines.i02_1.i02_1_gridscan_plan.construct_i02_1_specific_features" ,
196+ )
154197@patch (
155198 "mx_bluesky.common.external_interaction.callbacks.grid.gridscan.ispyb_callback.StoreInIspyb"
156199)
157200def test_ispyb_activated_correct_params (
158201 mock_store_ispyb : MagicMock ,
159202 mock_create_features : MagicMock ,
203+ mock_get_internal_params : MagicMock ,
160204 run_engine : RunEngine ,
161205 fgs_params_two_d : I02_1FgsParams ,
162206 fgs_composite : FlyScanXRayCentreComposite ,
207+ entry_params : ExternalGridScanParams ,
163208):
164209 mock_ispyb = MagicMock ()
210+ mock_get_internal_params .return_value = fgs_params_two_d
165211
166212 mock_store_ispyb .return_value = mock_ispyb
167213 expected_features = construct_i02_1_specific_features (
@@ -171,7 +217,7 @@ def test_ispyb_activated_correct_params(
171217
172218 mock_create_features .return_value = expected_features
173219
174- run_engine (i02_1_gridscan_plan (fgs_params_two_d , fgs_composite ))
220+ run_engine (i02_1_gridscan_plan (entry_params , fgs_composite ))
175221 initial_group_info = populate_data_collection_group (fgs_params_two_d )
176222 initial_group_info .comments = f"Diffraction grid scan of { fgs_params_two_d .x_steps } by { fgs_params_two_d .y_steps [0 ]} .Zocalo processing took 0.00 s."
177223 initial_scan_info = ScanDataInfo (
0 commit comments