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()
|
||||
|
||||
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