def test_error_if_space_group_not_given(self, mocker):
        dict_with_space_group_missing = CALCITE_CIF.copy()
        dict_with_space_group_missing.pop("symmetry_space_group_name_H-M")
        mocker.patch("diffraction.crystal.DirectLattice")

        with pytest.raises(ValueError) as exception_info:
            Crystal.from_dict(dict_with_space_group_missing)
        assert str(exception_info.value) == ("Parameter: 'space_group' "
                                             "missing from input dictionary")
    def test_lattice_parameters_and_space_group_are_assigned(self, mocker):
        mock_lattice = mocker.Mock(spec=DirectLattice)
        mocker.patch("diffraction.crystal.DirectLattice.from_dict",
                     return_value=mock_lattice)

        c = Crystal.from_dict(CALCITE_DATA)
        assert c.space_group == CALCITE_DATA["space_group"]
        assert c.lattice == mock_lattice
    def test_loading_atomic_sites_from_dict(self, mocker):
        mocker.patch("diffraction.crystal.DirectLattice.from_dict")
        calcite_data_with_sites = CALCITE_DATA.copy()
        calcite_data_with_sites["sites"] = CALCITE_ATOMIC_SITES

        c = Crystal.from_dict(calcite_data_with_sites)
        expected_sites = {name: Site(ion, position)
                          for name, (ion, position) in CALCITE_ATOMIC_SITES.items()}
        assert c.sites == expected_sites
    def test_lattice_parameters_and_space_group_are_assigned(self, mocker):
        mocker.patch("diffraction.crystal.load_data_block", return_value=CALCITE_CIF)
        mock_lattice = mocker.Mock(spec=DirectLattice)
        m = mocker.patch("diffraction.crystal.DirectLattice.from_cif",
                         return_value=mock_lattice)

        c = Crystal.from_cif("some/cif/file.cif", load_sites=False)
        m.assert_called_once_with("some/cif/file.cif", None)
        assert c.lattice == mock_lattice
        assert c.space_group == "R -3 c H"