From d324ada3103f9d479089d75a7c5d81f7bae7e4bd Mon Sep 17 00:00:00 2001 From: Domi31tls Date: Fri, 3 Jul 2026 09:42:15 +0200 Subject: [PATCH] =?UTF-8?q?test(core):=20verrouiller=20le=20fallback=20eds?= =?UTF-8?q?nlp=20sur=20drugs.json=20corrompu=20(revue=20qualit=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- tests/unit/test_edsnlp_drugs_static.py | 42 ++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/unit/test_edsnlp_drugs_static.py b/tests/unit/test_edsnlp_drugs_static.py index 0e9f8f5..c3f58f2 100644 --- a/tests/unit/test_edsnlp_drugs_static.py +++ b/tests/unit/test_edsnlp_drugs_static.py @@ -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)"