"""Перевод HTML Eva в Markdown (wiki-module, spec wiki «Markdown-копия вики», design 10).""" import re from pathlib import Path from jira_hub.modules.wiki import convert FIX = Path(__file__).parent / "fixtures" / "wiki" FILE_URL = "https://eva.example.test/files/obj/CmfDocument/CmfDocument%3Aa08/CmfDocument%3A3f2a9c1e-0b7d-4e8a-9c21-5d6e7f8a9b0c/model.xlsx?version=1" IMG_REF = "/files/obj/CmfDocument/CmfDocument%3Aa08/CmfDocument%3A3f2a9c1e-0b7d-4e8a-9c21-5d6e7f8a9b0c/image2026-7-27_14-20-6.png?version=1" THUMB_REF = "/files/obj/CmfDocument/CmfDocument%3Aa08/CmfDocument%3A3f2a9c1e-0b7d-4e8a-9c21-5d6e7f8a9b0c/model.xlsx.meta/thumbnail.jpg?version=1" FILE_REF = "/files/obj/CmfDocument/CmfDocument%3Aa08/CmfDocument%3A3f2a9c1e-0b7d-4e8a-9c21-5d6e7f8a9b0c/model.xlsx?version=1" def _html(name): return (FIX / name).read_text(encoding="utf-8") def test_image_becomes_attachment(): md, atts = convert.to_markdown( _html("page_image.html"), [{"ref": IMG_REF, "url": "https://eva.example.test" + IMG_REF, "name": "image2026-7-27_14-20-6.png"}], [], ) assert "[📎 image2026-7-27_14-20-6.png](attachment:@0)" in md.splitlines() assert atts == [{"url": "https://eva.example.test" + IMG_REF, "name": "image2026-7-27_14-20-6.png"}] def test_thumbnail_and_file_one_link(): md, atts = convert.to_markdown( _html("page_file.html"), [ {"ref": THUMB_REF, "url": FILE_URL, "name": "model.xlsx"}, {"ref": FILE_REF, "url": FILE_URL, "name": "model.xlsx"}, ], [], ) assert [a["name"] for a in atts] == ["model.xlsx"] and len(atts) == 1 assert md.count("](attachment:@0)") == 1 assert "[📎 model.xlsx](attachment:@0)" in md assert "attach-file" not in md def test_page_link(): md, _ = convert.to_markdown( _html("page_links.html"), [], [{"ref": "project/Document/DOC-019834", "code": "DOC-019834"}], ) assert "[Модель данных](page:DOC-019834)" in md def test_external_link_kept(): md, _ = convert.to_markdown(_html("page_links.html"), [], []) assert "(https://example.org)" in md def test_no_raw_html(): for name in ("page_image.html", "page_file.html", "page_links.html"): md, _ = convert.to_markdown( _html(name), [{"ref": IMG_REF, "url": "https://eva.example.test" + IMG_REF, "name": "image.png"}, {"ref": THUMB_REF, "url": FILE_URL, "name": "model.xlsx"}, {"ref": FILE_REF, "url": FILE_URL, "name": "model.xlsx"}], [{"ref": "project/Document/DOC-019834", "code": "DOC-019834"}], ) assert re.search(r"<[a-zA-Z/]", md) is None, name def test_table_kept(): md, _ = convert.to_markdown(_html("page_links.html"), [], []) table_lines = [line for line in md.splitlines() if "|" in line] assert table_lines and any("---" in line for line in table_lines) def test_headings_atx(): md, _ = convert.to_markdown(_html("page_links.html"), [], []) assert "# Требования" in md.splitlines() def test_static_links_removed(): html = '
Текст
и ссылка