Skip to content

Commit 36ddac5

Browse files
committed
Updated existing tests
1 parent 97d1091 commit 36ddac5

1 file changed

Lines changed: 37 additions & 227 deletions

File tree

tests/client/contexts/test_fib.py

Lines changed: 37 additions & 227 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import xml.etree.ElementTree as ET
21
from pathlib import Path
3-
from typing import Any
42
from unittest.mock import MagicMock
53

64
import pytest
@@ -18,183 +16,19 @@
1816
# -------------------------------------------------------------------------------------
1917

2018

21-
def create_fib_maps_dataset_element(
22-
id: int,
23-
name: str,
24-
relative_path: str,
25-
center_x: float,
26-
center_y: float,
27-
center_z: float,
28-
size_x: float,
29-
size_y: float,
30-
size_z: float,
31-
rotation_angle: float,
32-
status: str,
33-
):
34-
# Create dataset node
35-
dataset = ET.Element("Dataset")
36-
# ID node
37-
id_node = ET.Element("Id")
38-
id_node.text = str(id)
39-
dataset.append(id_node)
40-
41-
# Name node
42-
name_node = ET.Element("Name")
43-
name_node.text = name
44-
dataset.append(name_node)
45-
46-
# Stage position node
47-
box_center = ET.Element("BoxCenter")
48-
for tag, value in (
49-
("CenterX", center_x),
50-
("CenterY", center_y),
51-
("CenterZ", center_z),
52-
):
53-
node = ET.Element(tag)
54-
node.text = str(value)
55-
box_center.append(node)
56-
dataset.append(box_center)
57-
58-
# Image size node
59-
box_size = ET.Element("BoxSize")
60-
for tag, value in (
61-
("SizeX", size_x),
62-
("SizeY", size_y),
63-
("SizeZ", size_z),
64-
):
65-
node = ET.Element(tag)
66-
node.text = str(value)
67-
box_size.append(node)
68-
dataset.append(box_size)
69-
70-
# Rotation angle
71-
angle_node = ET.Element("RotationAngle")
72-
angle_node.text = str(rotation_angle)
73-
dataset.append(angle_node)
74-
75-
# Relative path
76-
image_path_node = ET.Element("FinalImages")
77-
image_path_node.text = relative_path.replace("/", "\\")
78-
dataset.append(image_path_node)
79-
80-
# Status
81-
status_node = ET.Element("Status")
82-
status_node.text = status
83-
dataset.append(status_node)
84-
85-
return dataset
86-
87-
88-
def create_fib_maps_xml_metadata(
89-
project_name: str,
90-
datasets: list[dict[str, Any]],
91-
):
92-
# Create root node
93-
root = ET.Element("EMProject")
94-
95-
# Project name node
96-
project_name_node = ET.Element("ProjectName")
97-
project_name_node.text = project_name
98-
root.append(project_name_node)
99-
100-
# Datasets node
101-
datasets_node = ET.Element("Datasets")
102-
for id, dataset in enumerate(datasets):
103-
datasets_node.append(create_fib_maps_dataset_element(id, **dataset))
104-
root.append(datasets_node)
105-
106-
return root
107-
108-
109-
fib_maps_test_datasets = [
110-
{
111-
"name": name,
112-
"relative_path": relative_path,
113-
"center_x": cx,
114-
"center_y": cy,
115-
"center_z": cz,
116-
"size_x": sx,
117-
"size_y": sy,
118-
"size_z": sz,
119-
"rotation_angle": ra,
120-
"status": "Finished",
121-
}
122-
for (name, relative_path, cx, cy, cz, sx, sy, sz, ra) in (
123-
(
124-
"Electron Snapshot",
125-
"LayersData/Layer/Electron Snapshot",
126-
-0.002,
127-
-0.004,
128-
0.00000008,
129-
0.0036,
130-
0.0024,
131-
0.0,
132-
3.1415926535897931,
133-
),
134-
(
135-
"Electron Snapshot (2)",
136-
"LayersData/Layer/Electron Snapshot (2)",
137-
-0.002,
138-
-0.004,
139-
0.00000008,
140-
0.0036,
141-
0.0024,
142-
0.0,
143-
3.1415926535897931,
144-
),
145-
(
146-
"Electron Snapshot (3)",
147-
"LayersData/Layer/Electron Snapshot (3)",
148-
0.002,
149-
0.004,
150-
0.00000008,
151-
0.0036,
152-
0.0024,
153-
0.0,
154-
3.1415926535897931,
155-
),
156-
(
157-
"Electron Snapshot (4)",
158-
"LayersData/Layer/Electron Snapshot (4)",
159-
0.002,
160-
0.004,
161-
0.00000008,
162-
0.0036,
163-
0.0024,
164-
0.0,
165-
3.1415926535897931,
166-
),
167-
)
168-
]
169-
170-
17119
@pytest.fixture
17220
def visit_dir(tmp_path: Path):
17321
return tmp_path / "visit"
17422

17523

17624
@pytest.fixture
177-
def fib_maps_metadata_file(visit_dir: Path):
178-
metadata = create_fib_maps_xml_metadata(
179-
"test-project",
180-
fib_maps_test_datasets,
181-
)
182-
tree = ET.ElementTree(metadata)
183-
ET.indent(tree, space=" ")
184-
save_path = visit_dir / "maps/visit/EMproject.emxml"
185-
if not save_path.parent.exists():
186-
save_path.parent.mkdir(parents=True, exist_ok=True)
187-
tree.write(save_path, encoding="utf-8")
188-
return save_path
189-
190-
191-
@pytest.fixture
192-
def fib_maps_images(fib_maps_metadata_file: Path):
25+
def fib_maps_images(visit_dir: Path):
19326
image_list = []
194-
for dataset in fib_maps_test_datasets:
195-
name = str(dataset["name"])
196-
relative_path = str(dataset["relative_path"])
197-
file = fib_maps_metadata_file.parent / relative_path / f"{name}.tiff"
27+
for i in range(4):
28+
name = "Electron Snapshot"
29+
if i > 0:
30+
name += f" ({i})"
31+
file = visit_dir / "maps/visit/LayersData/Layer" / f"{name}.tiff"
19832
if not file.exists():
19933
file.parent.mkdir(parents=True, exist_ok=True)
20034
file.touch()
@@ -229,7 +63,6 @@ def test_get_source(
22963
tmp_path: Path,
23064
visit_dir: Path,
23165
fib_maps_images: list[Path],
232-
fib_maps_metadata_file: Path,
23366
):
23467
# Mock the MurfeyInstanceEnvironment
23568
mock_environment = MagicMock()
@@ -238,15 +71,14 @@ def test_get_source(
23871
tmp_path / "another_dir",
23972
]
24073
# Check that the correct source directory is found
241-
for file in [fib_maps_metadata_file, *fib_maps_images]:
74+
for file in fib_maps_images:
24275
assert _get_source(file, mock_environment) == visit_dir
24376

24477

24578
def test_file_transferred_to(
24679
tmp_path: Path,
24780
visit_dir: Path,
24881
fib_maps_images: list[Path],
249-
fib_maps_metadata_file: Path,
25082
):
25183
# Mock the environment
25284
mock_environment = MagicMock()
@@ -255,7 +87,7 @@ def test_file_transferred_to(
25587

25688
# Iterate across the FIB files to compare against
25789
destination_dir = tmp_path / "fib" / "data" / "current_year" / "visit"
258-
for file in [fib_maps_metadata_file, *fib_maps_images]:
90+
for file in fib_maps_images:
25991
# Work out what the expected destination will be
26092
assert _file_transferred_to(
26193
environment=mock_environment,
@@ -265,29 +97,36 @@ def test_file_transferred_to(
26597
) == destination_dir / file.relative_to(visit_dir)
26698

26799

268-
def test_parse_electron_snapshot_metadata():
269-
pass
270-
271-
272100
def test_fib_autotem_context():
273101
pass
274102

275103

276-
@pytest.mark.parametrize("metadata_first", ((False, True)))
277104
def test_fib_maps_context(
278105
mocker: MockerFixture,
279106
tmp_path: Path,
280-
fib_maps_metadata_file: Path,
107+
visit_dir: Path,
281108
fib_maps_images: list[Path],
282-
metadata_first: bool,
283109
):
284-
# Mock out irrelevant functions
285-
mocker.patch("murfey.client.contexts.fib._get_source", return_value=tmp_path)
286-
mocker.patch(
287-
"murfey.client.contexts.fib._file_transferred_to", side_effect=fib_maps_images
288-
)
110+
# Mock the environment
289111
mock_environment = MagicMock()
290112

113+
# Create a list of destinations
114+
destination_dir = tmp_path / "fib" / "data" / "current_year" / "visit"
115+
destination_files = [
116+
destination_dir / file.relative_to(visit_dir) for file in fib_maps_images
117+
]
118+
119+
# Mock the functions used in 'post_transfer'
120+
mock_get_source = mocker.patch(
121+
"murfey.client.contexts.fib._get_source", return_value=tmp_path
122+
)
123+
mock_file_transferred_to = mocker.patch(
124+
"murfey.client.contexts.fib._file_transferred_to", side_effect=destination_files
125+
)
126+
mock_register_fib_atlas = mocker.patch.object(
127+
FIBContext, "_register_atlas", return_value=True
128+
)
129+
291130
# Initialise the FIBContext
292131
basepath = tmp_path
293132
context = FIBContext(
@@ -296,46 +135,17 @@ def test_fib_maps_context(
296135
machine_config={},
297136
token="",
298137
)
299-
# Assert that its initial state is correct
300-
assert not context._electron_snapshots
301-
assert not context._electron_snapshot_metadata
302-
assert not context._electron_snapshots_submitted
303138

304-
if metadata_first:
305-
# Read the metadata first
306-
context.post_transfer(fib_maps_metadata_file, mock_environment)
307-
# Metadata field should now be populated
308-
assert all(
309-
name in context._electron_snapshot_metadata.keys()
310-
for name in [image.stem for image in fib_maps_images]
311-
)
312-
# Parse the images one-by-one
313-
for image in fib_maps_images:
314-
name = image.stem
315-
context.post_transfer(image, mock_environment)
316-
# Entries should now start being removed from 'metadata' and 'images' fields
317-
assert (
318-
name not in context._electron_snapshots.keys()
319-
and name not in context._electron_snapshot_metadata.keys()
320-
and name in context._electron_snapshots_submitted
321-
)
322-
else:
323-
# Read in images first
324-
for image in fib_maps_images:
325-
name = image.stem
326-
context.post_transfer(image, mock_environment)
327-
assert (
328-
name in context._electron_snapshots.keys()
329-
and name not in context._electron_snapshot_metadata.keys()
330-
and name not in context._electron_snapshots_submitted
331-
)
332-
# Read in the metadata
333-
context.post_transfer(fib_maps_metadata_file, mock_environment)
334-
assert all(
335-
name in context._electron_snapshots_submitted
336-
and name not in context._electron_snapshots.keys()
337-
and name not in context._electron_snapshot_metadata.keys()
338-
for name in [file.stem for file in fib_maps_images]
139+
# Parse images one-by-one
140+
for file in fib_maps_images:
141+
context.post_transfer(file, environment=mock_environment)
142+
assert mock_get_source.call_count == len(fib_maps_images)
143+
assert mock_file_transferred_to.call_count == len(fib_maps_images)
144+
assert mock_register_fib_atlas.call_count == len(fib_maps_images)
145+
for dst in destination_files:
146+
mock_register_fib_atlas.assert_any_call(
147+
dst,
148+
mock_environment,
339149
)
340150

341151

0 commit comments

Comments
 (0)