from trawls.processors.html_to_md import html_to_markdown ARTICLE = """ Titre

Le chalut de fond

Le chalut est un filet remorqué par un navire. Il ratisse le fond et remonte tout ce qui s'y trouve, ce qui en fait un engin très efficace mais controversé.

Fonctionnement

Le filet est maintenu ouvert par des panneaux. Voir les détails.

TypeProfondeur
Fond200 m
Pélagique50 m
100 m
print("ok")
Un chalut b64
""" def test_main_content_and_boilerplate() -> None: r = html_to_markdown(ARTICLE, "https://ex.com/a/b") md = r.markdown assert md.startswith("# Le chalut de fond") assert "**chalut**" in md and "*remorqué*" in md assert "## Fonctionnement" in md assert "[les détails](https://ex.com/details)" in md assert "- Panneaux divergents" in md and " - Diabolos" in md assert "| Type | Profondeur |" in md and "| Pélagique | 100 m |" in md assert '```python\nprint("ok")\n```' in md assert "![Un chalut](https://ex.com/img/chalut.png)" in md assert "b64" not in md for bad in ("Accueil", "cookies", "Mentions légales", "Lien 1"): assert bad not in md, bad def test_full_page_keeps_nav_text() -> None: r = html_to_markdown(ARTICLE, "https://ex.com", only_main_content=False) assert "Accueil" in r.markdown and "Le chalut de fond" in r.markdown def test_broken_html_never_raises() -> None: for html in ( "", "

ouvert", "<<<>>>", "
x
", "\x00\x01garbage", "

" * 5000, ): r = html_to_markdown(html, "https://ex.com") assert isinstance(r.markdown, str) def test_citations() -> None: r = html_to_markdown( "

Voir A et B puis A encore. Un paragraphe assez long pour que le scoring le garde comme contenu principal, avec plusieurs phrases, des virgules, et du texte.

", "https://ex.com", citations=True, ) assert "[A][1]" in r.markdown and "[B][2]" in r.markdown and "[A encore][1]" in r.markdown assert "[1]: https://a.com" in r.markdown def test_headings_normalized() -> None: r = html_to_markdown( "

Un

Texte assez long pour compter comme du contenu, avec des phrases et de la ponctuation. Encore une phrase ici.

Deux

Suite du texte, encore quelques mots pour la densité, et une virgule.

", "https://ex.com", only_main_content=False, ) assert r.markdown.count("\n# ") + (1 if r.markdown.startswith("# ") else 0) == 1 assert "## Deux" in r.markdown def test_definition_list_and_details() -> None: r = html_to_markdown( "
Terme
Définition
Plus

Caché

", "https://ex.com", only_main_content=False, ) assert ( "**Terme**" in r.markdown and ": Définition" in r.markdown and "**Plus**" in r.markdown and "Caché" in r.markdown )