from app.services.pause_detection_service import ( MIN_PAUSE_MS, Pause, PauseDetectionService, _pause_symbol, ) from app.services.transcription_service import STTSegment def test_pause_symbol_bands_are_conservative(): assert _pause_symbol(MIN_PAUSE_MS - 0.1) is None assert _pause_symbol(MIN_PAUSE_MS) == "..." assert _pause_symbol(1799.9) == "..." assert _pause_symbol(1800.0) == "......" assert _pause_symbol(2999.9) == "......" assert _pause_symbol(3000.0) == "........." def test_single_segment_ignores_short_internal_pause(): service = PauseDetectionService.__new__(PauseDetectionService) transcript = "Hello there" segments = [STTSegment(text=transcript, start_ms=0.0, end_ms=2000.0)] pauses = [ Pause( start_ms=500.0, end_ms=1300.0, duration_ms=800.0, symbol="...", ) ] result = service.build_pause_text(transcript, segments, pauses) assert result.pause_text == transcript assert result.inserted_pause_count == 0 assert result.insertion_strategy == "none" def test_single_segment_inserts_only_when_pause_is_long_enough(): service = PauseDetectionService.__new__(PauseDetectionService) transcript = "Hello there" segments = [STTSegment(text=transcript, start_ms=0.0, end_ms=2000.0)] pauses = [ Pause( start_ms=500.0, end_ms=1900.0, duration_ms=1400.0, symbol="...", ) ] result = service.build_pause_text(transcript, segments, pauses) assert result.pause_text == "Hello... there" assert result.inserted_pause_count == 1 assert result.insertion_strategy == "single_segment" def test_multi_segment_inserts_only_between_segments(): service = PauseDetectionService.__new__(PauseDetectionService) transcript = "Hello there world" segments = [ STTSegment(text="Hello there", start_ms=0.0, end_ms=1500.0), STTSegment(text="world", start_ms=3000.0, end_ms=3600.0), ] pauses = [ Pause( start_ms=400.0, end_ms=1400.0, duration_ms=1000.0, symbol="...", ), Pause( start_ms=1500.0, end_ms=3000.0, duration_ms=1500.0, symbol="...", ), ] result = service.build_pause_text(transcript, segments, pauses) assert result.pause_text == "Hello there... world" assert result.inserted_pause_count == 1 assert result.insertion_strategy == "segment_boundary"