Skip to content

Commit 72e3964

Browse files
committed
test(unit): add tests for Neighbors.get_symmetry
1 parent b98888b commit 72e3964

1 file changed

Lines changed: 123 additions & 1 deletion

File tree

tests/unit/CodeEntropy/levels/test_neighbors.py

Lines changed: 123 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import contextlib
2-
from unittest.mock import MagicMock, patch
2+
from unittest.mock import MagicMock, call, patch
33

44
import numpy as np
55
import pytest
@@ -235,3 +235,125 @@ class HybridizationType:
235235
result = neighbors._get_linear(rdkit_mol, number_heavy)
236236

237237
assert result is False
238+
239+
240+
def test_get_symmetry_returns_dicts_for_single_group():
241+
neighbors = Neighbors()
242+
universe = MagicMock()
243+
groups = {7: [42, 99]}
244+
245+
rdkit_mol = MagicMock()
246+
247+
neighbors._get_rdkit_mol = MagicMock(return_value=(rdkit_mol, 5, 8))
248+
neighbors._get_symmetry_number = MagicMock(return_value=12)
249+
neighbors._get_linear = MagicMock(return_value=True)
250+
251+
symmetry_number, linear = neighbors.get_symmetry(universe, groups)
252+
253+
assert symmetry_number == {7: 12}
254+
assert linear == {7: True}
255+
256+
neighbors._get_rdkit_mol.assert_called_once_with(universe, 42)
257+
neighbors._get_symmetry_number.assert_called_once_with(rdkit_mol, 5, 8)
258+
neighbors._get_linear.assert_called_once_with(rdkit_mol, 5)
259+
260+
261+
def test_get_symmetry_uses_first_molecule_in_each_group_only():
262+
neighbors = Neighbors()
263+
universe = MagicMock()
264+
groups = {
265+
0: [10, 11, 12],
266+
1: [20, 21],
267+
}
268+
269+
rdkit_mol_0 = MagicMock()
270+
rdkit_mol_1 = MagicMock()
271+
272+
neighbors._get_rdkit_mol = MagicMock(
273+
side_effect=[
274+
(rdkit_mol_0, 3, 6),
275+
(rdkit_mol_1, 4, 8),
276+
]
277+
)
278+
neighbors._get_symmetry_number = MagicMock(side_effect=[2, 4])
279+
neighbors._get_linear = MagicMock(side_effect=[False, True])
280+
281+
symmetry_number, linear = neighbors.get_symmetry(universe, groups)
282+
283+
assert symmetry_number == {0: 2, 1: 4}
284+
assert linear == {0: False, 1: True}
285+
286+
assert neighbors._get_rdkit_mol.call_args_list == [
287+
call(universe, 10),
288+
call(universe, 20),
289+
]
290+
291+
292+
def test_get_symmetry_calls_helpers_for_each_group_in_order():
293+
neighbors = Neighbors()
294+
universe = MagicMock()
295+
groups = {
296+
3: [100],
297+
5: [200],
298+
}
299+
300+
rdkit_mol_a = MagicMock()
301+
rdkit_mol_b = MagicMock()
302+
303+
neighbors._get_rdkit_mol = MagicMock(
304+
side_effect=[
305+
(rdkit_mol_a, 1, 2),
306+
(rdkit_mol_b, 7, 0),
307+
]
308+
)
309+
neighbors._get_symmetry_number = MagicMock(side_effect=[9, 1])
310+
neighbors._get_linear = MagicMock(side_effect=[True, False])
311+
312+
symmetry_number, linear = neighbors.get_symmetry(universe, groups)
313+
314+
assert symmetry_number == {3: 9, 5: 1}
315+
assert linear == {3: True, 5: False}
316+
317+
assert neighbors._get_symmetry_number.call_args_list == [
318+
call(rdkit_mol_a, 1, 2),
319+
call(rdkit_mol_b, 7, 0),
320+
]
321+
assert neighbors._get_linear.call_args_list == [
322+
call(rdkit_mol_a, 1),
323+
call(rdkit_mol_b, 7),
324+
]
325+
326+
327+
def test_get_symmetry_returns_empty_dicts_for_empty_groups():
328+
neighbors = Neighbors()
329+
universe = MagicMock()
330+
groups = {}
331+
332+
neighbors._get_rdkit_mol = MagicMock()
333+
neighbors._get_symmetry_number = MagicMock()
334+
neighbors._get_linear = MagicMock()
335+
336+
symmetry_number, linear = neighbors.get_symmetry(universe, groups)
337+
338+
assert symmetry_number == {}
339+
assert linear == {}
340+
341+
neighbors._get_rdkit_mol.assert_not_called()
342+
neighbors._get_symmetry_number.assert_not_called()
343+
neighbors._get_linear.assert_not_called()
344+
345+
346+
def test_get_symmetry_propagates_error_from_get_rdkit_mol():
347+
neighbors = Neighbors()
348+
universe = MagicMock()
349+
groups = {0: [123]}
350+
351+
neighbors._get_rdkit_mol = MagicMock(side_effect=RuntimeError("bad molecule"))
352+
neighbors._get_symmetry_number = MagicMock()
353+
neighbors._get_linear = MagicMock()
354+
355+
with pytest.raises(RuntimeError, match="bad molecule"):
356+
neighbors.get_symmetry(universe, groups)
357+
358+
neighbors._get_symmetry_number.assert_not_called()
359+
neighbors._get_linear.assert_not_called()

0 commit comments

Comments
 (0)