@@ -216,7 +216,10 @@ def test_load_aspect_model(self):
216216
217217 @mock .patch ("esmf_aspect_meta_model_python.loader.samm_graph.ModelElementFactory" )
218218 @mock .patch ("esmf_aspect_meta_model_python.loader.samm_graph.SAMMGraph.get_aspect_urn" )
219- def test_load_aspect_model_create_element (self , get_aspect_urn_mock , model_element_factory_mock ):
219+ @mock .patch ("esmf_aspect_meta_model_python.loader.samm_graph.SAMMGraph._validate_samm_namespace_version" )
220+ def test_load_aspect_model_create_element (
221+ self , validate_samm_namespace_version_mock , get_aspect_urn_mock , model_element_factory_mock
222+ ):
220223 reader_mock = mock .MagicMock (name = "reader" )
221224 cache_mock = mock .MagicMock (name = "cache" )
222225 samm_graph = SAMMGraph ()
@@ -229,13 +232,53 @@ def test_load_aspect_model_create_element(self, get_aspect_urn_mock, model_eleme
229232 get_aspect_urn_mock .return_value = "aspect_urn"
230233 model_element_factory_mock .return_value = model_element_factory_mock
231234 model_element_factory_mock .create_element .return_value = "aspect"
235+
232236 result = samm_graph .load_aspect_model ()
233237
234238 assert result == "aspect"
235239 get_aspect_urn_mock .assert_called_once ()
236240 reader_mock .prepare_aspect_model .assert_called_once_with ("rdf_graph_samm_graph" )
237241 model_element_factory_mock .assert_called_once_with ("1.2.3" , "rdf_graph_samm_graph" , cache_mock )
238242 model_element_factory_mock .create_element .assert_called_once_with ("aspect_urn" )
243+ validate_samm_namespace_version_mock .assert_called_once_with ("rdf_graph_samm_graph" )
244+
245+ class TestValidateSammNamespaceVersion :
246+ """Test suite for SAMMGraph._validate_samm_namespace_version method."""
247+
248+ def test_valid_version (self ):
249+ version = "1.2.3"
250+ samm_graph = SAMMGraph ()
251+ samm_graph .samm_version = version
252+ graph = mock .MagicMock (name = "rdf_graph" )
253+ graph .namespace_manager .namespaces .return_value = [
254+ ("rdf" , "http://www.w3.org/1999/02/22-rdf-syntax-ns#" ),
255+ ("samm" , f"urn:samm:org.eclipse.esmf.samm:meta-model:{ version } #" ), # True
256+ ("samm1" , f"urn:samm:org.eclipse.esmf.samm:{ version } #" ),
257+ ("samm-e1" , f"urn:samm:org.eclipse.esmf.samm:entity:{ version } #" ), # True
258+ ("samm-c1" , "urn:samm:org.china.zes.samm:extension:1.1.1#" ),
259+ ]
260+
261+ # Should not raise an exception
262+ samm_graph ._validate_samm_namespace_version (graph )
263+
264+ def test_version_mismatch (self ):
265+ samm_version = "2.2.0"
266+ earlier_version = "2.1.0"
267+ samm_graph = SAMMGraph ()
268+ samm_graph .samm_version = samm_version
269+ graph = mock .MagicMock (name = "rdf_graph" )
270+ graph .namespace_manager .namespaces .return_value = [
271+ ("rdf" , "http://www.w3.org/1999/02/22-rdf-syntax-ns#" ),
272+ ("samm" , f"urn:samm:org.eclipse.esmf.samm:meta-model:{ samm_version } #" ),
273+ ("samm-e1" , f"urn:samm:org.eclipse.esmf.samm:extension:{ earlier_version } #" ), # Exception
274+ ]
275+
276+ with pytest .raises (
277+ ValueError ,
278+ match = f"SAMM version mismatch. Found '{ earlier_version } ', but expected '{ samm_version } '. "
279+ "Ensure all RDF files use a single, consistent SAMM version" ,
280+ ):
281+ samm_graph ._validate_samm_namespace_version (graph )
239282
240283 def test_load_model_elements (self ):
241284 samm_graph = SAMMGraph ()
0 commit comments