dp-zp-agent/test/test_common.py
2026-07-28 23:56:03 +02:00

133 lines
3.1 KiB
Python

from __future__ import annotations
from pathlib import Path
import pytest
import scripts.common as common
def write_page(path: Path, text: str) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(text, encoding="utf-8")
def patch_root(
monkeypatch: pytest.MonkeyPatch,
root: Path,
) -> None:
monkeypatch.setattr(common, "ZPWIKI_ROOT", root)
monkeypatch.setattr(common, "PAGES_ROOT", root / "pages")
def test_yaml_metadata_and_title_have_priority(
tmp_path: Path,
monkeypatch: pytest.MonkeyPatch,
) -> None:
root = tmp_path / "zpwiki"
page = root / "pages" / "student" / "README.md"
write_page(
page,
"""---
title: YAML názov
published: true
taxonomy:
category: [dp2027]
tag: [rag, nlp]
author: Daniel Hladek
---
# Markdown názov
Obsah.
""",
)
patch_root(monkeypatch, root)
document = common.load_zpwiki_page(page)
assert document["path"] == "pages/student/README.md"
assert document["title"] == "YAML názov"
assert document["published"] is True
assert document["categories"] == ["dp2027"]
assert document["tags"] == ["rag", "nlp"]
assert document["author"] == "Daniel Hladek"
assert document["content"] == "# Markdown názov\n\nObsah."
def test_first_markdown_heading_is_title_fallback(
tmp_path: Path,
monkeypatch: pytest.MonkeyPatch,
) -> None:
root = tmp_path / "zpwiki"
page = root / "pages" / "translation" / "README.md"
write_page(
page,
"""```markdown
# Toto nie je názov dokumentu
```
# **Strojový** [preklad](https://example.com)
Obsah.
""",
)
patch_root(monkeypatch, root)
document = common.load_zpwiki_page(page)
assert document["title"] == "Strojový preklad"
def test_parent_directory_is_title_fallback(
tmp_path: Path,
monkeypatch: pytest.MonkeyPatch,
) -> None:
root = tmp_path / "zpwiki"
page = root / "pages" / "patrik_pavlisin" / "README.md"
write_page(page, "Text bez YAML title a bez nadpisu.")
patch_root(monkeypatch, root)
document = common.load_zpwiki_page(page)
assert document["title"] == "Patrik Pavlisin"
@pytest.mark.parametrize(
("value", "expected"),
[
(True, True),
(False, False),
(1, True),
(0, False),
("true", True),
("ÁNO", True),
("false", False),
("nie", False),
(None, None),
("neznáma hodnota", None),
],
)
def test_optional_bool_normalization(value, expected) -> None:
assert common.normalize_optional_bool(value) is expected
def test_normalize_list_removes_empty_values_and_duplicates() -> None:
assert common.normalize_list("rag, nlp, rag, ") == ["rag", "nlp"]
assert common.normalize_list(["rag", "", "rag", "nlp"]) == [
"rag",
"nlp",
]
assert common.normalize_list(None) == []
def test_json_roundtrip(tmp_path: Path) -> None:
path = tmp_path / "nested" / "data.json"
value = {"text": "Ján Pták", "published": True}
common.write_json(path, value)
assert common.read_json(path) == value