File size: 2,232 Bytes
6851b52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
"""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