Skip to content

Commit ce56f3a

Browse files
committed
Added unit test for 'register_data_collection' workflow
1 parent a42f8d9 commit ce56f3a

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
from unittest.mock import MagicMock
2+
3+
import pytest
4+
from pytest_mock import MockerFixture
5+
6+
from murfey.workflows.register_data_collection import run
7+
from tests.conftest import ExampleVisit
8+
9+
register_data_collection_params_matrix = (
10+
# ISPyB session ID return value | DCG search result | DC search result | Insert data collection
11+
(0, 0, 0, 0),
12+
(0, 0, 0, None),
13+
(0, 0, None, 0),
14+
(0, 0, None, None),
15+
(0, None, 0, 0),
16+
(0, None, 0, None),
17+
(0, None, None, 0),
18+
(0, None, None, None),
19+
(None, 0, 0, 0),
20+
(None, 0, 0, None),
21+
# (None, 0, None, 0),
22+
# (None, 0, None, None),
23+
(None, None, 0, 0),
24+
(None, None, 0, None),
25+
(None, None, None, 0),
26+
(None, None, None, None),
27+
)
28+
29+
30+
@pytest.mark.parametrize("test_params", register_data_collection_params_matrix)
31+
def test_run(
32+
mocker: MockerFixture,
33+
test_params: tuple[int | None, int | None, int | None, int | None],
34+
):
35+
# Unpack test params
36+
ispyb_session_id, dcg_result, dc_result, insert_data_collection = test_params
37+
38+
# Set up mock objects
39+
mock_get_session_id = mocker.patch(
40+
"murfey.workflows.register_data_collection.get_session_id"
41+
)
42+
mock_get_session_id.return_value = ispyb_session_id
43+
mock_transport_object = mocker.patch(
44+
"murfey.workflows.register_data_collection._transport_object"
45+
)
46+
mock_transport_object.do_insert_data_collection.return_value = {
47+
"return_value": insert_data_collection
48+
}
49+
mock_murfey_db = MagicMock()
50+
mock_dcg = MagicMock()
51+
mock_dcg.id = dcg_result
52+
53+
mock_dc = MagicMock()
54+
mock_dc.id = dc_result
55+
mock_murfey_db.exec.return_value.all.side_effect = [
56+
# Sequence of mock database tables
57+
[mock_dcg] if dcg_result is not None else [],
58+
[mock_dc] if dc_result is not None else [],
59+
]
60+
61+
# Run the function and check results and calls
62+
message = {
63+
"session_id": 0,
64+
"microscope": "test_instrument",
65+
"proposal_code": ExampleVisit.proposal_code,
66+
"proposal_number": ExampleVisit.proposal_number,
67+
"visit_number": ExampleVisit.visit_number,
68+
"source": "some_path",
69+
"image_directory": "some_path",
70+
"tag": "some_string",
71+
"experiment_type": "SPA",
72+
"image_suffix": ".jpg",
73+
"voltage": 200,
74+
"pixel_size": 1e-9,
75+
"image_size_x": 2048,
76+
"image_size_y": 2048,
77+
"slit_width": 0.005,
78+
"magnification": 150000,
79+
"exposure_time": 30,
80+
"total_exposed_dose": 30,
81+
"c2aperture": 5,
82+
"phase_plate": 1,
83+
}
84+
result = run(message=message, murfey_db=mock_murfey_db)
85+
if dcg_result is None:
86+
assert result == {"success": False, "requeue": True}
87+
else:
88+
if dc_result is None:
89+
if ispyb_session_id is not None:
90+
mock_transport_object.do_insert_data_collection.assert_called_once()
91+
if insert_data_collection is None:
92+
assert result == {"success": False, "requeue": True}
93+
else:
94+
assert result == {"success": True}
95+
else:
96+
mock_transport_object.do_insert_data_collection.assert_not_called()
97+
98+
assert result == {"success": True}
99+
else:
100+
assert result == {"success": True}

0 commit comments

Comments
 (0)