from investibook.core.incident_analysis_status import ( compute_incident_analysis_status, summarize_incident_analysis, ) def test_analysis_rate_formula(): rows = [ {"manual_not_incident": False, "derive_mark_type": None, "linked_workspace_count": 1}, {"manual_not_incident": False, "derive_mark_type": None, "linked_workspace_count": 0}, {"manual_not_incident": False, "derive_mark_type": None, "linked_workspace_count": 2}, {"manual_not_incident": True}, {"derive_mark_type": "unsupported_incident"}, ] s = summarize_incident_analysis(rows) assert s["analyzed"] == 2 assert s["not_analyzed"] == 1 assert s["counts"]["not_incident"] == 1 assert s["counts"]["unsupported"] == 1 assert abs(s["analysis_rate"] - 2 / 3) < 0.001 def test_merged_status(): assert ( compute_incident_analysis_status({"merged_into_dossier_id": "x", "manual_not_incident": False}) == "merged" ) assert ( compute_incident_analysis_status({"merge_audit_as_source": 1, "manual_not_incident": False}) == "merged" ) def test_disposition_stack_counts_separates_no_analysis_needed(): from investibook.core.incident_analysis_status import disposition_stack_counts stack = disposition_stack_counts( { "analyzed": 2, "no_analysis_needed": 1, "not_analyzed": 3, "not_incident": 0, "merged": 0, "unsupported": 0, } ) assert stack["disposition_analyzed"] == 2 assert stack["disposition_no_analysis_needed"] == 1 assert stack["disposition_total"] == 6