"""Tests pour la fusion des suppléments CIM-10 dans cim10_dict.""" from __future__ import annotations import json from pathlib import Path from unittest.mock import patch import pytest from src.medical.cim10_dict import load_dict, validate_code, reset_cache @pytest.fixture(autouse=True) def _reset(): """Reset le cache singleton avant/après chaque test.""" reset_cache() yield reset_cache() class TestCim10Supplements: """Tests pour la fusion des sous-codes supplémentaires.""" def test_e11_9_valid(self): """E11.9 (diabète type 2 sans complication) est reconnu.""" is_valid, label = validate_code("E11.9") assert is_valid assert "diabète" in label.lower() or "type 2" in label.lower() def test_e10_9_valid(self): """E10.9 (diabète type 1 sans complication) est reconnu.""" is_valid, label = validate_code("E10.9") assert is_valid assert "type 1" in label.lower() def test_f10_2_valid(self): """F10.2 (alcool, syndrome de dépendance) est reconnu.""" is_valid, label = validate_code("F10.2") assert is_valid assert "alcool" in label.lower() def test_e13_9_valid(self): """E13.9 (autres diabètes sans complication) est reconnu.""" is_valid, label = validate_code("E13.9") assert is_valid def test_main_dict_not_overwritten(self): """Les entrées du dict principal ne sont PAS écrasées par les suppléments.""" d = load_dict() # E11 existe dans le dict principal avec un label issu de FAISS assert "E11" in d # Le label doit venir du dict principal, pas des suppléments # (les suppléments ne contiennent que E11.0-E11.9, pas E11) def test_supplements_file_missing(self, tmp_path): """load_dict() fonctionne normalement si le fichier suppléments n'existe pas.""" fake_supplements = tmp_path / "nonexistent.json" with patch("src.medical.cim10_dict.CIM10_SUPPLEMENTS_PATH", fake_supplements): d = load_dict() assert len(d) > 0 # Le dict principal est chargé def test_supplement_codes_count(self): """Les suppléments ajoutent les sous-codes attendus.""" d = load_dict() # Vérifier que E11.0 à E11.9 existent tous for i in range(10): code = f"E11.{i}" assert code in d, f"{code} manquant du dictionnaire" def test_validate_code_normalized(self): """validate_code normalise le format (e119 → E11.9).""" is_valid, label = validate_code("e119") assert is_valid assert label # Label non vide