test(core): verrouiller le fallback edsnlp sur drugs.json corrompu (revue qualité)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -111,3 +111,45 @@ def test_data_source_matches_package_source(monkeypatch, tmp_path):
|
|||||||
from_package = core._load_edsnlp_drug_names()
|
from_package = core._load_edsnlp_drug_names()
|
||||||
|
|
||||||
assert from_data == from_package
|
assert from_data == from_package
|
||||||
|
|
||||||
|
|
||||||
|
def test_corrupted_data_falls_back_to_package(monkeypatch, tmp_path):
|
||||||
|
"""Fichier data PRÉSENT mais corrompu + edsnlp DISPONIBLE → fail-safe :
|
||||||
|
retombe sur le package et retourne 4206 (jamais un set partiel/tronqué)."""
|
||||||
|
pytest.importorskip("edsnlp")
|
||||||
|
corrupt = tmp_path / "drugs.json"
|
||||||
|
corrupt.write_text("{ invalide", encoding="utf-8")
|
||||||
|
monkeypatch.setattr(core, "_EDSNLP_DRUGS_DATA_PATH", corrupt)
|
||||||
|
|
||||||
|
result = core._load_edsnlp_drug_names()
|
||||||
|
assert len(result) == EXPECTED_COUNT
|
||||||
|
for name in CONFLICT_NAMES:
|
||||||
|
assert name in result
|
||||||
|
|
||||||
|
|
||||||
|
def test_corrupted_data_and_no_package_warns(monkeypatch, tmp_path, caplog):
|
||||||
|
"""Fichier data corrompu ET edsnlp INDISPONIBLE → set() vide + log.warning
|
||||||
|
(dégradation rendue visible, pas de silence)."""
|
||||||
|
import builtins
|
||||||
|
|
||||||
|
corrupt = tmp_path / "drugs.json"
|
||||||
|
corrupt.write_text("{ invalide", encoding="utf-8")
|
||||||
|
monkeypatch.setattr(core, "_EDSNLP_DRUGS_DATA_PATH", corrupt)
|
||||||
|
|
||||||
|
_real_import = builtins.__import__
|
||||||
|
|
||||||
|
def _fake_import(name, *args, **kwargs):
|
||||||
|
if name == "edsnlp" or name.startswith("edsnlp."):
|
||||||
|
raise ImportError("edsnlp indisponible (torch-free)")
|
||||||
|
return _real_import(name, *args, **kwargs)
|
||||||
|
|
||||||
|
monkeypatch.setattr(builtins, "__import__", _fake_import)
|
||||||
|
|
||||||
|
with caplog.at_level("WARNING", logger=core.log.name):
|
||||||
|
result = core._load_edsnlp_drug_names()
|
||||||
|
|
||||||
|
assert result == set()
|
||||||
|
assert any(
|
||||||
|
"edsnlp" in rec.message.lower() and rec.levelname == "WARNING"
|
||||||
|
for rec in caplog.records
|
||||||
|
), "aucun log.warning émis lors de l'échec total (data corrompu + pas de package)"
|
||||||
|
|||||||
Reference in New Issue
Block a user