from src.config_loader import UnifiedLogSettings from src.models import PersonAnalysisRecord from src.session_summary_builder import SessionSummaryBuilder CFG=UnifiedLogSettings(True,"x",True,True,True,True,30,True,True,True,True,False,False,"cam",True) def test_rates_exclude_invalid() -> None: records=[PersonAnalysisRecord("e","s",1,"prompt","prompt",True,response_detected=True,reaction_time_sec=1.,turn_confirmed=True,turn_level="medium",valid_for_turn_analysis=True,valid_for_voice_analysis=True,completed=True), PersonAnalysisRecord("e","s",2,"prompt","prompt",True,response_detected=False,turn_level="subtle",valid_for_turn_analysis=False,valid_for_voice_analysis=False,excluded=True)] out=SessionSummaryBuilder(CFG,"e","s","start").build(records,"end",10.,"prompt",20.) assert out.total_tracks==2 and out.valid_voice_analysis_tracks==1 and out.response_rate==1. assert out.mean_reaction_time_sec==out.median_reaction_time_sec==1. assert out.not_evaluable_count==1 and out.medium_or_higher_count==1 and out.subtle_count==1 def test_zero_denominator() -> None: out=SessionSummaryBuilder(CFG,"e","s","start").build([],"end",0.,None) assert out.response_rate is None