"""Tests fuer _split_into_thread_posts (#178 Folge).""" import pytest try: from app.presse_generator import _split_into_thread_posts _HAS_FN = True except ImportError: _HAS_FN = False pytestmark = pytest.mark.skipif(not _HAS_FN, reason="presse_generator nicht importierbar") class TestSplitIntoThreadPosts: def test_short_text_one_post(self): text = "Kurzer Satz. Noch einer." out = _split_into_thread_posts(text) assert out.split("\n\n") == ["Kurzer Satz. Noch einer."] def test_long_text_splits_at_sentences(self): # 4 lange Sätze, jeder ~80 chars → 2-3 Posts text = ( "Mieter haben ein Recht auf sichere Versorgung. " "Der Antrag will das durch Strafrecht schützen. " "Versorgungssicherheit ist lebenswichtig für Familien. " "Wenn Vermieter Geld zurückhalten droht Wärme- und Wassersperre. " "Aktuelle Krisen verschärfen das Problem für Mieter:innen. " "Wir fordern eine klare Regelung. #GWO" ) out = _split_into_thread_posts(text, max_chars=200) posts = out.split("\n\n") assert len(posts) >= 2 for p in posts: assert len(p) <= 220 # mit etwas Toleranz für letzten Satz def test_each_post_under_280(self): # Realistischer Sample: 4-5 Sätze text = " ".join(["Ein Satz mit etwa 60 Zeichen Länge zur Prüfung."] * 8) out = _split_into_thread_posts(text) for p in out.split("\n\n"): assert len(p) <= 290 def test_handles_newlines(self): text = "Erster Satz.\nZweiter.\n\nDritter Satz." out = _split_into_thread_posts(text) # die Original-Newlines wurden zu Spaces zusammengeführt assert "\nZweiter" not in out assert "Erster Satz." in out assert "Dritter Satz." in out def test_hashtags_preserved(self): text = "Erster Satz mit Inhalt. Zweiter Satz mit Substanz. #GWO #Wohnrecht" out = _split_into_thread_posts(text) assert "#GWO" in out assert "#Wohnrecht" in out def test_empty_input(self): assert _split_into_thread_posts("") == "" def test_single_long_sentence_kept(self): """Wenn ein einzelner Satz > max_chars ist, wird er trotzdem nicht zerlegt.""" text = "A" * 350 out = _split_into_thread_posts(text, max_chars=280) # Sollte NUR einen Post liefern, weil keine Satzgrenze assert "\n\n" not in out