336628341b
- llm: generate_title_and_tldr() returns concise title and 2-3 sentence summary
- output: index in root, transkript+zusammenfassung in {base}/ subdir with backlinks
- pipeline: call generate_title_and_tldr for both solo and meeting recordings
- router: mirror subdir structure when copying to Obsidian vault
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
111 lines
3.9 KiB
Python
111 lines
3.9 KiB
Python
import os
|
|
import tempfile
|
|
from datetime import datetime
|
|
|
|
|
|
def test_save_transcript_creates_file():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
from output import save_transcript
|
|
path = save_transcript(
|
|
title="Test Aufnahme",
|
|
content="Dies ist ein Test.",
|
|
output_dir=tmpdir,
|
|
dt=datetime(2026, 4, 1, 14, 32, 0),
|
|
)
|
|
assert os.path.exists(path)
|
|
|
|
|
|
def test_save_transcript_filename_format():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
from output import save_transcript
|
|
path = save_transcript(
|
|
title="Mein erstes Diktat",
|
|
content="Inhalt.",
|
|
output_dir=tmpdir,
|
|
dt=datetime(2026, 4, 1, 14, 32, 0),
|
|
)
|
|
assert os.path.basename(path) == "2026-04-01-1432-mein-erstes-diktat.md"
|
|
|
|
|
|
def test_save_transcript_contains_frontmatter():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
from output import save_transcript
|
|
path = save_transcript(
|
|
title="Test",
|
|
content="Inhalt.",
|
|
output_dir=tmpdir,
|
|
dt=datetime(2026, 4, 1, 14, 32, 0),
|
|
)
|
|
text = open(path).read()
|
|
assert "---" in text
|
|
assert "date:" in text
|
|
assert "transkript" in text
|
|
|
|
|
|
def test_save_transcript_contains_content():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
from output import save_transcript
|
|
path = save_transcript(
|
|
title="Test",
|
|
content="Das ist der Inhalt.",
|
|
output_dir=tmpdir,
|
|
dt=datetime(2026, 4, 1, 14, 32, 0),
|
|
)
|
|
assert "Das ist der Inhalt." in open(path).read()
|
|
|
|
|
|
def test_slugify():
|
|
from output import slugify
|
|
assert slugify("Mein erstes Diktat") == "mein-erstes-diktat"
|
|
assert slugify("test -- foo") == "test-foo"
|
|
|
|
|
|
def test_write_solo_docs_creates_three_files(tmp_path):
|
|
from output import write_solo_docs
|
|
from datetime import datetime
|
|
paths = write_solo_docs(
|
|
raw_text="Das ist der rohe Text vom Mikrofon.",
|
|
refined="# Projektstatus\n\nDas Projekt läuft gut.\n",
|
|
output_dir=str(tmp_path),
|
|
dt=datetime(2026, 4, 2, 15, 0),
|
|
title="Projektstatus Update",
|
|
tldr="Das Projekt läuft gut und ist im Zeitplan.",
|
|
)
|
|
assert set(paths.keys()) == {"index", "transkript", "zusammenfassung"}
|
|
assert all(os.path.exists(p) for p in paths.values())
|
|
index = open(paths["index"]).read()
|
|
assert "Projektstatus Update" in index
|
|
assert "transkript" in index
|
|
assert "zusammenfassung" in index
|
|
# transkript and zusammenfassung are in a subdir
|
|
assert os.path.dirname(paths["transkript"]) != str(tmp_path)
|
|
assert os.path.dirname(paths["index"]) == str(tmp_path)
|
|
# backlinks present
|
|
assert "Index" in open(paths["transkript"]).read()
|
|
assert "Index" in open(paths["zusammenfassung"]).read()
|
|
assert "Das ist der rohe Text" in open(paths["transkript"]).read()
|
|
assert "Projekt läuft gut" in open(paths["zusammenfassung"]).read()
|
|
|
|
|
|
def test_write_meeting_docs_creates_three_files(tmp_path):
|
|
from output import write_meeting_docs
|
|
from datetime import datetime
|
|
aligned = [("Thomas", "Gut, dann fangen wir an."), ("Möller", "Ich hab das vorbereitet.")]
|
|
paths = write_meeting_docs(
|
|
aligned_segments=aligned,
|
|
summary="# Meeting\n\n## Wichtigste Punkte\n- Budget besprochen",
|
|
speakers=["Thomas", "Möller"],
|
|
duration_min=5,
|
|
output_dir=str(tmp_path),
|
|
dt=datetime(2026, 4, 2, 14, 30),
|
|
)
|
|
assert len(paths) == 3
|
|
index_content = open(paths["index"]).read()
|
|
assert "Thomas" in index_content
|
|
assert "transkript" in index_content
|
|
transcript_content = open(paths["transkript"]).read()
|
|
assert "**Thomas:**" in transcript_content
|
|
assert "Gut, dann fangen wir an." in transcript_content
|
|
summary_content = open(paths["zusammenfassung"]).read()
|
|
assert "Budget besprochen" in summary_content
|