Skip to content

Commit 281fa2d

Browse files
committed
test(unit): add unit tests for Neighbors._get_rdkit_mol
1 parent 72e3964 commit 281fa2d

1 file changed

Lines changed: 130 additions & 0 deletions

File tree

tests/unit/CodeEntropy/levels/test_neighbors.py

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,3 +357,133 @@ def test_get_symmetry_propagates_error_from_get_rdkit_mol():
357357

358358
neighbors._get_symmetry_number.assert_not_called()
359359
neighbors._get_linear.assert_not_called()
360+
361+
362+
def test_get_rdkit_mol_guesses_elements_when_missing():
363+
neighbors = Neighbors()
364+
365+
universe = MagicMock()
366+
molecule = MagicMock()
367+
dummy = MagicMock()
368+
369+
del universe.atoms.elements
370+
universe.atoms.fragments = [molecule]
371+
372+
molecule.select_atoms.side_effect = [dummy]
373+
dummy.__len__.return_value = 0
374+
375+
rdkit_mol = MagicMock()
376+
rdkit_mol.GetNumHeavyAtoms.return_value = 3
377+
rdkit_mol.GetNumAtoms.return_value = 8
378+
molecule.convert_to.return_value = rdkit_mol
379+
380+
result = neighbors._get_rdkit_mol(universe, 0)
381+
382+
universe.guess_TopologyAttrs.assert_called_once_with(to_guess=["elements"])
383+
molecule.convert_to.assert_called_once_with("RDKIT", force=True)
384+
assert result == (rdkit_mol, 3, 5)
385+
386+
387+
def test_get_rdkit_mol_does_not_guess_elements_when_present():
388+
neighbors = Neighbors()
389+
390+
universe = MagicMock()
391+
molecule = MagicMock()
392+
dummy = MagicMock()
393+
394+
universe.atoms.elements = ["C", "H"]
395+
universe.atoms.fragments = [molecule]
396+
397+
molecule.select_atoms.side_effect = [dummy]
398+
dummy.__len__.return_value = 0
399+
400+
rdkit_mol = MagicMock()
401+
rdkit_mol.GetNumHeavyAtoms.return_value = 2
402+
rdkit_mol.GetNumAtoms.return_value = 6
403+
molecule.convert_to.return_value = rdkit_mol
404+
405+
result = neighbors._get_rdkit_mol(universe, 0)
406+
407+
universe.guess_TopologyAttrs.assert_not_called()
408+
molecule.convert_to.assert_called_once_with("RDKIT", force=True)
409+
assert result == (rdkit_mol, 2, 4)
410+
411+
412+
def test_get_rdkit_mol_uses_full_molecule_when_no_dummy_atoms():
413+
neighbors = Neighbors()
414+
415+
universe = MagicMock()
416+
molecule = MagicMock()
417+
dummy = MagicMock()
418+
419+
universe.atoms.elements = ["C"]
420+
universe.atoms.fragments = [molecule]
421+
422+
molecule.select_atoms.side_effect = [dummy]
423+
dummy.__len__.return_value = 0
424+
425+
rdkit_mol = MagicMock()
426+
rdkit_mol.GetNumHeavyAtoms.return_value = 4
427+
rdkit_mol.GetNumAtoms.return_value = 10
428+
molecule.convert_to.return_value = rdkit_mol
429+
430+
result = neighbors._get_rdkit_mol(universe, 0)
431+
432+
molecule.select_atoms.assert_called_once_with("prop mass < 0.1")
433+
molecule.convert_to.assert_called_once_with("RDKIT", force=True)
434+
assert result == (rdkit_mol, 4, 6)
435+
436+
437+
def test_get_rdkit_mol_removes_dummy_atoms_and_uses_inferrer_none():
438+
neighbors = Neighbors()
439+
440+
universe = MagicMock()
441+
molecule = MagicMock()
442+
dummy = MagicMock()
443+
frag = MagicMock()
444+
445+
universe.atoms.elements = ["C"]
446+
universe.atoms.fragments = [molecule]
447+
448+
molecule.select_atoms.side_effect = [dummy, frag]
449+
dummy.__len__.return_value = 2
450+
451+
rdkit_mol = MagicMock()
452+
rdkit_mol.GetNumHeavyAtoms.return_value = 5
453+
rdkit_mol.GetNumAtoms.return_value = 12
454+
frag.convert_to.return_value = rdkit_mol
455+
456+
result = neighbors._get_rdkit_mol(universe, 0)
457+
458+
assert molecule.select_atoms.call_args_list == [
459+
(("prop mass < 0.1",),),
460+
(("prop mass > 0.1",),),
461+
]
462+
frag.convert_to.assert_called_once_with("RDKIT", force=True, inferrer=None)
463+
molecule.convert_to.assert_not_called()
464+
assert result == (rdkit_mol, 5, 7)
465+
466+
467+
def test_get_rdkit_mol_returns_correct_heavy_and_hydrogen_counts():
468+
neighbors = Neighbors()
469+
470+
universe = MagicMock()
471+
molecule = MagicMock()
472+
dummy = MagicMock()
473+
474+
universe.atoms.elements = ["O", "H", "H"]
475+
universe.atoms.fragments = [molecule]
476+
477+
molecule.select_atoms.side_effect = [dummy]
478+
dummy.__len__.return_value = 0
479+
480+
rdkit_mol = MagicMock()
481+
rdkit_mol.GetNumHeavyAtoms.return_value = 1
482+
rdkit_mol.GetNumAtoms.return_value = 3
483+
molecule.convert_to.return_value = rdkit_mol
484+
485+
rdkit_out, number_heavy, number_hydrogen = neighbors._get_rdkit_mol(universe, 0)
486+
487+
assert rdkit_out is rdkit_mol
488+
assert number_heavy == 1
489+
assert number_hydrogen == 2

0 commit comments

Comments
 (0)