jdmagent / tests /test_relations_parser.py
expAge
chore: bootstrap JDM Agent project (Phase 0 + Phase 1)
6851b52
"""Tests du parseur de relation_definitions.md."""
from __future__ import annotations
from pathlib import Path
import pytest
from jdm_agent.client.relations import (
RelationDoc,
describe_relation,
parse_relation_definitions,
)
SAMPLE = """# Description Sémantique des Relations - JeuxDeMots
## 1. Test
### Synonym (`r_syn`)
Relie des termes ayant un sens identique ou très proche.
* chat | r_syn | matou
* voiture | r_syn | automobile
### Is-A / Generic (`r_isa`)
Désigne un lien de généralisation.
* chat | r_isa | mammifère
* truite | r_isa | poisson
* marteau | r_isa | outil
"""
@pytest.fixture
def sample_file(tmp_path: Path) -> Path:
p = tmp_path / "relation_definitions.md"
p.write_bytes(SAMPLE.encode("cp1252"))
return p
def test_parses_basic_relations(sample_file: Path):
docs = parse_relation_definitions(sample_file)
assert set(docs.keys()) == {"r_syn", "r_isa"}
r = docs["r_syn"]
assert isinstance(r, RelationDoc)
assert "identique" in r.description
assert ("chat", "r_syn", "matou") in r.examples
assert len(docs["r_isa"].examples) == 3
def test_describe_relation_output(sample_file: Path):
docs = parse_relation_definitions(sample_file)
out = describe_relation("r_isa", docs)
assert "r_isa" in out
assert "ex.:" in out
assert "Is-A" in out
def test_missing_file_is_non_blocking(tmp_path: Path):
docs = parse_relation_definitions(tmp_path / "nope.md")
assert docs == {}
def test_describe_relation_unknown(sample_file: Path):
docs = parse_relation_definitions(sample_file)
out = describe_relation("r_unknown", docs)
assert "r_unknown" in out
assert "non document" in out.lower()
def test_real_relation_definitions_file_parses():
"""Smoke-test contre le vrai fichier (s'il est présent)."""
docs = parse_relation_definitions()
if not docs:
pytest.skip("relation_definitions.md absent")
# Sanity : on doit retrouver les relations canoniques.
for code in ("r_syn", "r_isa", "r_hypo", "r_anto", "r_has_part"):
assert code in docs, f"{code} manque dans relation_definitions.md"
# > 100 relations parsées (le doc en référence ~180).
assert len(docs) > 100