@@ -227,5 +227,108 @@ def test_custom_name_with_known_url_includes_url(self):
227227 self .assertIn ("nvidia.com" , lic ["url" ])
228228
229229
230+ @patch ("src.models.service.calculate_completeness_score" )
231+ @patch ("src.models.service.EnhancedExtractor" )
232+ def test_training_data_flag_with_datasets (self , mock_extractor_cls , mock_score ):
233+ """Test that trainingDataAvailable flag is set to true when datasets are present"""
234+ # Setup
235+ mock_extractor = mock_extractor_cls .return_value
236+ metadata_with_data = {
237+ "name" : "test-model" ,
238+ "datasets" : ["dataset1" , "dataset2" ],
239+ "commit" : "123456"
240+ }
241+ mock_extractor .extract_metadata .return_value = metadata_with_data
242+ mock_extractor .extraction_results = {}
243+ mock_score .return_value = {"total_score" : 50 }
244+
245+ self .service .hf_api .model_info .return_value = MagicMock (sha = "123456" )
246+
247+ # Mock dataset verification
248+ with patch .object (self .service , '_verify_dataset_exists_on_hf' , return_value = True ):
249+ # Action
250+ aibom = self .service .generate_aibom ("owner/model" )
251+
252+ # Verify
253+ model_card = aibom ["components" ][0 ].get ("modelCard" , {})
254+ properties = model_card .get ("properties" , [])
255+
256+ # Find the trainingDataAvailable property
257+ training_flag = next ((p for p in properties if p ["name" ] == "genai:aibom:trainingDataAvailable" ), None )
258+ self .assertIsNotNone (training_flag )
259+ self .assertEqual (training_flag ["value" ], "true" )
260+
261+ # Verify no warning
262+ warning = next ((p for p in properties if p ["name" ] == "genai:aibom:trainingDataWarning" ), None )
263+ self .assertIsNone (warning )
264+
265+ @patch ("src.models.service.calculate_completeness_score" )
266+ @patch ("src.models.service.EnhancedExtractor" )
267+ def test_training_data_flag_without_datasets (self , mock_extractor_cls , mock_score ):
268+ """Test that trainingDataAvailable flag is set to false and warning is added when datasets are missing"""
269+ # Setup
270+ mock_extractor = mock_extractor_cls .return_value
271+ metadata_no_data = {
272+ "name" : "test-model" ,
273+ "commit" : "123456"
274+ # No datasets key
275+ }
276+ mock_extractor .extract_metadata .return_value = metadata_no_data
277+ mock_extractor .extraction_results = {}
278+ mock_score .return_value = {"total_score" : 50 }
279+
280+ self .service .hf_api .model_info .return_value = MagicMock (sha = "123456" )
281+
282+ # Action
283+ aibom = self .service .generate_aibom ("owner/model" )
284+
285+ # Verify
286+ model_card = aibom ["components" ][0 ].get ("modelCard" , {})
287+ properties = model_card .get ("properties" , [])
288+
289+ # Find the trainingDataAvailable property
290+ training_flag = next ((p for p in properties if p ["name" ] == "genai:aibom:trainingDataAvailable" ), None )
291+ self .assertIsNotNone (training_flag )
292+ self .assertEqual (training_flag ["value" ], "false" )
293+
294+ # Verify warning is present
295+ warning = next ((p for p in properties if p ["name" ] == "genai:aibom:trainingDataWarning" ), None )
296+ self .assertIsNotNone (warning )
297+ self .assertIn ("Training data information is missing" , warning ["value" ])
298+
299+ def test_verify_datasets_available_with_valid_datasets (self ):
300+ """Test dataset verification with valid datasets"""
301+ # Mock the HF API call
302+ with patch .object (self .service , '_verify_dataset_exists_on_hf' , return_value = True ):
303+ # List of valid datasets
304+ metadata = {"datasets" : ["dataset1" , "dataset2" ]}
305+ self .assertTrue (self .service ._verify_datasets_available (metadata ))
306+
307+ # Single string dataset
308+ metadata = {"datasets" : "valid_dataset" }
309+ self .assertTrue (self .service ._verify_datasets_available (metadata ))
310+
311+ # Dict format with name
312+ metadata = {"datasets" : {"name" : "my_dataset" , "url" : "https://example.com" }}
313+ self .assertTrue (self .service ._verify_datasets_available (metadata ))
314+
315+ def test_verify_datasets_available_with_empty_datasets (self ):
316+ """Test dataset verification with empty or invalid datasets"""
317+ # Empty list
318+ metadata = {"datasets" : []}
319+ self .assertFalse (self .service ._verify_datasets_available (metadata ))
320+
321+ # List with empty strings
322+ metadata = {"datasets" : ["" , " " , "" ]}
323+ self .assertFalse (self .service ._verify_datasets_available (metadata ))
324+
325+ # Unknown placeholder
326+ metadata = {"datasets" : ["unknown" ]}
327+ self .assertFalse (self .service ._verify_datasets_available (metadata ))
328+
329+ # No datasets key
330+ metadata = {"name" : "test-model" }
331+ self .assertFalse (self .service ._verify_datasets_available (metadata ))
332+
230333if __name__ == '__main__' :
231334 unittest .main ()
0 commit comments