videoNote / backend /tests /test_note_helper.py
zhoujiaangyao
deploy videomemo backend to HF Space
6cfe55f
Raw
History Blame Contribute Delete
2.89 kB
import importlib.util
import pathlib
import unittest
ROOT = pathlib.Path(__file__).resolve().parents[1]
MODULE_PATH = ROOT / "app" / "utils" / "note_helper.py"
spec = importlib.util.spec_from_file_location("note_helper", MODULE_PATH)
if spec is None or spec.loader is None:
raise ImportError("note_helper module spec not found")
note_helper = importlib.util.module_from_spec(spec)
spec.loader.exec_module(note_helper)
class TestNoteHelper(unittest.TestCase):
def test_prepend_source_link_adds_header_at_top(self):
source_url = "https://www.bilibili.com/video/BV1xx411c7mD"
markdown = "## 标题\n\n内容"
result = note_helper.prepend_source_link(markdown, source_url)
self.assertTrue(result.startswith(f"> 来源链接:{source_url}\n\n"))
self.assertIn("## 标题", result)
def test_prepend_source_link_does_not_duplicate_when_header_exists(self):
source_url = "https://www.youtube.com/watch?v=abc123"
markdown = f"> 来源链接:{source_url}\n\n## 标题\n\n内容"
result = note_helper.prepend_source_link(markdown, source_url)
self.assertEqual(result, markdown)
def test_normalize_toc_strips_heading_markers_in_items(self):
markdown = "## 目录\n\n- ## 1. 章节一\n- ## 2. 章节二\n\n## 1. 章节一\n正文"
result = note_helper.normalize_toc(markdown)
self.assertIn("- 1. 章节一", result)
self.assertIn("- 2. 章节二", result)
self.assertNotIn("- ## ", result)
# 正文标题不受影响
self.assertIn("\n## 1. 章节一\n", result)
def test_normalize_toc_strips_heading_marker_inside_bold(self):
markdown = "## 目录\n\n- **## 4. 应用矩阵**\n\n## 4. 应用矩阵\n正文"
result = note_helper.normalize_toc(markdown)
# 加粗保留,只剥标题标记
self.assertIn("- **4. 应用矩阵**", result)
def test_normalize_toc_keeps_sub_items_and_strips_their_markers(self):
markdown = (
"## 目录\n\n"
"- 章节一\n"
" - 子项A\n"
" - ## 子项B\n"
"- 章节二\n\n"
"## 章节一\n正文"
)
result = note_helper.normalize_toc(markdown)
# 嵌套子项允许、缩进保留;子项里的标题标记同样剥掉
self.assertIn(" - 子项A", result)
self.assertIn(" - 子项B", result)
self.assertNotIn("- ## 子项B", result)
self.assertIn("- 章节一", result)
self.assertIn("- 章节二", result)
def test_normalize_toc_noop_without_toc_section(self):
markdown = "# 标题\n\n- 普通列表 ## 不该被动\n正文"
self.assertEqual(note_helper.normalize_toc(markdown), markdown)
self.assertIsNone(note_helper.normalize_toc(None))
if __name__ == "__main__":
unittest.main()