"""FC-3e: HTML-strip + word-boundary truncator unit tests.""" from backend.app.utils.text import html_to_plain, truncate_at_word def test_html_to_plain_strips_tags(): assert html_to_plain("

hi

") == "hi" def test_html_to_plain_converts_br_to_newline(): assert html_to_plain("a
b") == "a\nb" def test_html_to_plain_converts_p_close_to_newline(): assert html_to_plain("

one

two

") == "one\ntwo" def test_html_to_plain_collapses_runs_of_whitespace(): assert html_to_plain("a b") == "a b" def test_html_to_plain_preserves_intentional_newlines_between_blocks(): assert html_to_plain("alpha

beta") == "alpha\n\nbeta" def test_html_to_plain_idempotent_on_plain_text(): assert html_to_plain("plain text") == "plain text" def test_html_to_plain_none_returns_empty(): assert html_to_plain(None) == "" def test_html_to_plain_decodes_entities(): assert html_to_plain("a & b") == "a & b" def test_truncate_at_word_under_limit_no_change(): assert truncate_at_word("short", 100) == ("short", False) def test_truncate_at_word_breaks_at_whitespace(): assert truncate_at_word("alpha beta gamma", 8) == ("alpha…", True) def test_truncate_at_word_no_whitespace_hard_cuts(): # No space to break on within the limit — hard-cut at the limit. assert truncate_at_word("abcdefghij", 5) == ("abcde…", True) def test_truncate_at_word_handles_none(): assert truncate_at_word(None, 10) == ("", False) def test_truncate_at_word_handles_empty_string(): assert truncate_at_word("", 10) == ("", False)