vibe2blog / tests /test_extractor.py
iwanfirmawan's picture
feat: extract raw agent transcripts
5bde2e9 verified
Raw
History Blame Contribute Delete
2.76 kB
from __future__ import annotations
import os
import unittest
from unittest.mock import patch
from vibe2blog.extractor import maybe_extract_session_summary
RAW_CLAUDE_TRANSCRIPT = """
> Fix modal bottom sheet overlaps with native navigation bottom bar
⏺ I'll inspect the bottom sheet implementation.
⏺ Read(src/screens/HomeScreen.tsx)
⎿ Read 100 lines
⏺ I found the issue. The bottom sheet padding doesn't account for safe area insets.
⏺ Update(src/screens/HomeScreen.tsx)
⎿ Updated src/screens/HomeScreen.tsx with 2 additions
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
+ paddingBottom: 24 + insets.bottom + 70,
⏺ Bash(npm run type-check)
⎿ Found pre-existing type errors
⏺ Bash(npx eslint src/screens/HomeScreen.tsx)
⎿ ESLint completed with existing warnings
⏺ Done. The branch is now focused on the advanced filters fix.
"""
class TranscriptExtractorTest(unittest.TestCase):
def test_extracts_claude_code_raw_transcript_into_summary(self) -> None:
summary = maybe_extract_session_summary(RAW_CLAUDE_TRANSCRIPT, language="id")
self.assertIn("Masalah awal", summary)
self.assertIn("bottom sheet overlaps", summary)
self.assertIn("Temuan utama", summary)
self.assertIn("safe area insets", summary)
self.assertIn("Perubahan yang dilakukan", summary)
self.assertIn("useSafeAreaInsets", summary)
self.assertIn("Verifikasi", summary)
self.assertIn("type-check", summary)
self.assertIn("File terkait", summary)
self.assertIn("src/screens/HomeScreen.tsx", summary)
self.assertNotIn("⏺", summary)
self.assertNotIn("Bash(", summary)
self.assertIn("Command: npm run type-check", summary)
def test_uses_modal_summary_when_endpoint_is_configured(self) -> None:
modal_summary = "Masalah awal: Modal returned a compact extraction."
with patch.dict(os.environ, {"MODAL_VLLM_BASE_URL": "https://example.modal.run"}):
with patch("vibe2blog.extractor.summarize_with_modal_vllm", return_value=modal_summary):
summary = maybe_extract_session_summary(RAW_CLAUDE_TRANSCRIPT, language="id")
self.assertEqual(summary, modal_summary)
def test_falls_back_to_deterministic_extraction_when_modal_fails(self) -> None:
with patch.dict(os.environ, {"MODAL_VLLM_BASE_URL": "https://example.modal.run"}):
with patch("vibe2blog.extractor.summarize_with_modal_vllm", return_value=""):
summary = maybe_extract_session_summary(RAW_CLAUDE_TRANSCRIPT, language="id")
self.assertIn("Masalah awal", summary)
self.assertIn("src/screens/HomeScreen.tsx", summary)
if __name__ == "__main__":
unittest.main()