99from src .sum_impact_assessment .schemas .job import JobStatusEnum
1010from src .sum_impact_assessment .schemas .impact_analysis import KPIGroupImpactOutput , MeasureImpactCoefficient
1111from src .sum_impact_assessment .schemas .core import KPIGroup , KPI , LivingLab , Measure , KPILivingLabResult
12- from src .sum_impact_assessment .utils .modal_split import MODAL_SPLIT_TRANSPORT_MODE_GROUPS
1312
1413
1514class TestKpiMeasuresAnalysisJob :
@@ -458,12 +457,12 @@ def test_job_handles_partial_failures(
458457
459458 @patch ("src.sum_impact_assessment.services.kpi_measures_analysis_job.KPIImpactAnalyzer" )
460459 @patch ("src.sum_impact_assessment.services.kpi_measures_analysis_job.AnalysisDataService" )
461- def test_run_kpi_impact_analysis_expands_modal_split_into_three_modes (
460+ def test_run_kpi_impact_analysis_expands_modal_split_into_available_modes (
462461 self ,
463462 mock_data_service_class ,
464463 mock_analyzer_class ,
465464 ):
466- """Modal Split group should be expanded according to configured transport-mode sub-groups."""
465+ """Modal Split group should be expanded into eligible configured transport-mode sub-groups."""
467466 mock_db = Mock ()
468467
469468 modal_group = KPIGroup (
@@ -540,39 +539,40 @@ def test_run_kpi_impact_analysis_expands_modal_split_into_three_modes(
540539 KPIGroupImpactOutput (
541540 id = "3__nsm" , name = "Modal Split - NSM" , kpi_ids = ["15" ]),
542541 KPIGroupImpactOutput (
543- id = "3__private " , name = "Modal Split - Private " , kpi_ids = ["15" ]),
542+ id = "3__all_private_modes " , name = "Modal Split - All private modes " , kpi_ids = ["15" ]),
544543 KPIGroupImpactOutput (
545544 id = "3__public_transport" , name = "Modal Split - Public transport" , kpi_ids = ["15" ]),
546545 KPIGroupImpactOutput (
547- id = "3__sustainable_modes " , name = "Modal Split - PT+ NSM" , kpi_ids = ["15" ]),
546+ id = "3__public_transport_with_nsm " , name = "Modal Split - Public Transport with NSM" , kpi_ids = ["15" ]),
548547 ]
549548
550549 input_snapshot , successful_results , error_results = KpiMeasuresAnalysisJob .run_kpi_impact_analysis (
551550 db = mock_db ,
552551 kpi_group_filter = None ,
553552 )
554553
555- assert len (input_snapshot ["kpi_groups" ]) == len (
556- MODAL_SPLIT_TRANSPORT_MODE_GROUPS )
557- assert len (successful_results ) == len (
558- MODAL_SPLIT_TRANSPORT_MODE_GROUPS )
554+ expected_modal_split_group_names = {
555+ "Modal Split - NSM" ,
556+ "Modal Split - All private modes" ,
557+ "Modal Split - Public transport" ,
558+ "Modal Split - Public Transport with NSM" ,
559+ }
560+
561+ assert len (input_snapshot ["kpi_groups" ]) == len (expected_modal_split_group_names )
562+ assert len (successful_results ) == len (expected_modal_split_group_names )
559563 assert len (error_results ) == 0
560- assert mock_analyzer .run_analysis_group .call_count == len (
561- MODAL_SPLIT_TRANSPORT_MODE_GROUPS )
564+ assert mock_analyzer .run_analysis_group .call_count == len (expected_modal_split_group_names )
562565
563566 analyzed_names = [
564567 call .args [0 ].name for call in mock_analyzer .run_analysis_group .call_args_list ]
565- assert "Modal Split - NSM" in analyzed_names
566- assert "Modal Split - Private" in analyzed_names
567- assert "Modal Split - Public transport" in analyzed_names
568- assert "Modal Split - PT+NSM" in analyzed_names
568+ assert set (analyzed_names ) == expected_modal_split_group_names
569569
570570 analyzed_groups = [call .args [0 ]
571571 for call in mock_analyzer .run_analysis_group .call_args_list ]
572- sustainable_group = next (
573- g for g in analyzed_groups if g .name == "Modal Split - PT+ NSM"
572+ public_transport_with_nsm_group = next (
573+ g for g in analyzed_groups if g .name == "Modal Split - Public Transport with NSM"
574574 )
575- assert sorted (sustainable_group .transport_mode_type_filter ) == [
575+ assert sorted (public_transport_with_nsm_group .transport_mode_type_filter ) == [
576576 "nsm" , "public_transport" ]
577577
578578 @patch ("src.sum_impact_assessment.services.kpi_measures_analysis_job.KPIImpactAnalyzer" )
@@ -637,7 +637,7 @@ def test_run_kpi_impact_analysis_modal_split_only_nsm_keeps_nsm_and_sustainable_
637637 ):
638638 """
639639 Given Modal Split analysis and only NSM KPI data in living labs,
640- then only NSM and PT+ NSM sub-groups are analyzed.
640+ then only NSM and Public Transport with NSM sub-groups are analyzed.
641641 """
642642 mock_db = Mock ()
643643
@@ -691,7 +691,7 @@ def test_run_kpi_impact_analysis_modal_split_only_nsm_keeps_nsm_and_sustainable_
691691 KPIGroupImpactOutput (
692692 id = "3__nsm" , name = "Modal Split - NSM" , kpi_ids = ["15" ]),
693693 KPIGroupImpactOutput (
694- id = "3__sustainable_modes " , name = "Modal Split - PT+ NSM" , kpi_ids = ["15" ]),
694+ id = "3__public_transport_with_nsm " , name = "Modal Split - Public Transport with NSM" , kpi_ids = ["15" ]),
695695 ]
696696
697697 input_snapshot , successful_results , error_results = KpiMeasuresAnalysisJob .run_kpi_impact_analysis (
@@ -707,8 +707,8 @@ def test_run_kpi_impact_analysis_modal_split_only_nsm_keeps_nsm_and_sustainable_
707707 assert len (error_results ) == 0
708708 assert mock_analyzer .run_analysis_group .call_count == 2
709709 assert "Modal Split - NSM" in analyzed_names
710- assert "Modal Split - PT+ NSM" in analyzed_names
711- assert "Modal Split - Private " not in analyzed_names
710+ assert "Modal Split - Public Transport with NSM" in analyzed_names
711+ assert "Modal Split - All private modes " not in analyzed_names
712712 assert "Modal Split - Public transport" not in analyzed_names
713713
714714 @patch ("src.sum_impact_assessment.services.kpi_measures_analysis_job.AnalysisDataService" )
@@ -830,25 +830,25 @@ def _make_living_lab(lab_id: str) -> LivingLab:
830830 result ["group_name" ]: result ["results" ] for result in successful_results
831831 }
832832 assert "Modal Split - NSM" in result_by_group_name
833- assert "Modal Split - Private " in result_by_group_name
833+ assert "Modal Split - All private modes " in result_by_group_name
834834 assert "Modal Split - Public transport" in result_by_group_name
835- assert "Modal Split - PT+ NSM" in result_by_group_name
835+ assert "Modal Split - Public Transport with NSM" in result_by_group_name
836836
837837 nsm_modes = {
838838 kpi ["transport_mode_type" ]
839839 for kpi in result_by_group_name ["Modal Split - NSM" ]["living_labs_analysis" ][0 ]["kpis" ]
840840 }
841841 private_modes = {
842842 kpi ["transport_mode_type" ]
843- for kpi in result_by_group_name ["Modal Split - Private " ]["living_labs_analysis" ][0 ]["kpis" ]
843+ for kpi in result_by_group_name ["Modal Split - All private modes " ]["living_labs_analysis" ][0 ]["kpis" ]
844844 }
845845 public_modes = {
846846 kpi ["transport_mode_type" ]
847847 for kpi in result_by_group_name ["Modal Split - Public transport" ]["living_labs_analysis" ][0 ]["kpis" ]
848848 }
849849 sustainable_modes = {
850850 kpi ["transport_mode_type" ]
851- for kpi in result_by_group_name ["Modal Split - PT+ NSM" ]["living_labs_analysis" ][0 ]["kpis" ]
851+ for kpi in result_by_group_name ["Modal Split - Public Transport with NSM" ]["living_labs_analysis" ][0 ]["kpis" ]
852852 }
853853
854854 assert nsm_modes == {"NSM" }
@@ -859,7 +859,7 @@ def _make_living_lab(lab_id: str) -> LivingLab:
859859 assert mock_run_ridge_regression .call_count == 4
860860
861861 # Call order follows modal split subgroup constant order:
862- # NSM[0], Private [1], Public transport[2], PT+ NSM[3].
862+ # NSM[0], All private modes [1], Public transport[2], Public Transport with NSM[3].
863863 # With autospec on an instance method, call args are: (self, X, y, ...)
864864 _ , nsm_call_X , nsm_call_y = mock_run_ridge_regression .call_args_list [0 ].args [:3 ]
865865
0 commit comments