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