@@ -60,7 +60,6 @@ def test_constructors(self):
6060 self .assertIn ("stage" , repr (e .exception ))
6161 self .assertIn ("code" , repr (e .exception ))
6262 self .assertIn ("start_date_time" , repr (e .exception ))
63- self .assertIn ("end_date_time" , repr (e .exception ))
6463 self .assertIn ("notes" , repr (e .exception ))
6564
6665 def test_resource_usage (self ):
@@ -361,6 +360,96 @@ def test_validate_pipeline_names(self):
361360 )
362361 self .assertIn ("Pipeline name 'NonExistentPipeline' not found in pipelines list" , str (e .exception ))
363362
363+ def test_order_processes (self ):
364+ """Test the order_processes method"""
365+
366+ # Create processes with different start times (out of order)
367+ t1 = datetime .fromisoformat ("2024-09-13T14:00:00" )
368+ t2 = datetime .fromisoformat ("2024-09-13T12:00:00" ) # Earlier time
369+ t3 = datetime .fromisoformat ("2024-09-13T16:00:00" ) # Later time
370+
371+ process1 = DataProcess (
372+ name = "process1" ,
373+ experimenters = ["Dr. Dan" ],
374+ process_type = ProcessName .COMPRESSION ,
375+ stage = ProcessStage .PROCESSING ,
376+ code = code ,
377+ start_date_time = t1 ,
378+ end_date_time = t1 ,
379+ )
380+ process2 = DataProcess (
381+ name = "process2" ,
382+ experimenters = ["Dr. Dan" ],
383+ process_type = ProcessName .ANALYSIS ,
384+ stage = ProcessStage .ANALYSIS ,
385+ code = code ,
386+ start_date_time = t2 ,
387+ end_date_time = t2 ,
388+ )
389+ process3 = DataProcess (
390+ name = "process3" ,
391+ experimenters = ["Dr. Dan" ],
392+ process_type = ProcessName .SPIKE_SORTING ,
393+ stage = ProcessStage .PROCESSING ,
394+ code = code ,
395+ start_date_time = t3 ,
396+ end_date_time = t3 ,
397+ )
398+
399+ # Create Processing with out-of-order processes
400+ dependency_graph = {"process1" : [], "process2" : [], "process3" : []}
401+ p = Processing (data_processes = [process1 , process2 , process3 ], dependency_graph = dependency_graph )
402+
403+ # Check that processes were reordered by start_date_time
404+ expected_order = [process2 , process1 , process3 ] # t2 < t1 < t3
405+ actual_names = [proc .name for proc in p .data_processes ]
406+ expected_names = [proc .name for proc in expected_order ]
407+ self .assertEqual (actual_names , expected_names )
408+
409+ # Check that notes were updated
410+ self .assertIn ("Processes were reordered by start_date_time" , p .notes )
411+
412+ # Test with already ordered processes
413+ process4 = DataProcess (
414+ name = "process4" ,
415+ experimenters = ["Dr. Dan" ],
416+ process_type = ProcessName .COMPRESSION ,
417+ stage = ProcessStage .PROCESSING ,
418+ code = code ,
419+ start_date_time = t1 ,
420+ end_date_time = t1 ,
421+ )
422+ process5 = DataProcess (
423+ name = "process5" ,
424+ experimenters = ["Dr. Dan" ],
425+ process_type = ProcessName .ANALYSIS ,
426+ stage = ProcessStage .ANALYSIS ,
427+ code = code ,
428+ start_date_time = t3 ,
429+ end_date_time = t3 ,
430+ )
431+
432+ dependency_graph2 = {"process4" : [], "process5" : []}
433+ p2 = Processing (data_processes = [process4 , process5 ], dependency_graph = dependency_graph2 )
434+
435+ # Check that order wasn't changed and no reordering note was added
436+ self .assertEqual ([proc .name for proc in p2 .data_processes ], ["process4" , "process5" ])
437+ self .assertIsNone (p2 .notes )
438+
439+ # Test with existing notes
440+ dependency_graph3 = {"process1" : [], "process2" : [], "process3" : []}
441+ p3 = Processing (
442+ data_processes = [process1 , process2 , process3 ], dependency_graph = dependency_graph3 , notes = "Existing notes"
443+ )
444+
445+ # Check that reordering note was appended to existing notes
446+ self .assertIn ("Existing notes; Processes were reordered by start_date_time" , p3 .notes )
447+
448+ # Test with empty data_processes
449+ p4 = Processing (data_processes = [], dependency_graph = {})
450+ self .assertEqual (len (p4 .data_processes ), 0 )
451+ self .assertIsNone (p4 .notes )
452+
364453
365454if __name__ == "__main__" :
366455 unittest .main ()
0 commit comments