|
|
""" |
|
|
Tests for Knowledge Base module |
|
|
""" |
|
|
|
|
|
import pytest |
|
|
from pathlib import Path |
|
|
import tempfile |
|
|
from knowledge_base import MedicalTermManager, load_terms_from_file, save_terms_to_file |
|
|
|
|
|
|
|
|
class TestMedicalTermManager: |
|
|
"""Tests for MedicalTermManager""" |
|
|
|
|
|
def test_initialization(self): |
|
|
"""Test basic initialization""" |
|
|
manager = MedicalTermManager() |
|
|
assert manager is not None |
|
|
assert isinstance(manager.terms, set) |
|
|
|
|
|
def test_add_term(self): |
|
|
"""Test adding a term""" |
|
|
manager = MedicalTermManager() |
|
|
manager.add_term("МРТ") |
|
|
|
|
|
assert "МРТ" in manager.terms |
|
|
|
|
|
def test_normalize_term(self): |
|
|
"""Test term normalization""" |
|
|
manager = MedicalTermManager() |
|
|
|
|
|
|
|
|
normalized = manager.normalize_term(" МРТ ") |
|
|
assert normalized == "МРТ" |
|
|
|
|
|
normalized = manager.normalize_term("Т1-ВИ режим") |
|
|
assert normalized == "Т1-ВИ режим" |
|
|
|
|
|
def test_categorization(self): |
|
|
"""Test automatic categorization""" |
|
|
manager = MedicalTermManager() |
|
|
|
|
|
|
|
|
manager.add_term("МРТ") |
|
|
manager.add_term("Т1-ВИ") |
|
|
manager.add_term("L4-L5") |
|
|
manager.add_term("грыжа") |
|
|
manager.add_term("гиперинтенсивный") |
|
|
|
|
|
|
|
|
assert len(manager.categories['imaging']) > 0 |
|
|
assert len(manager.categories['sequences']) > 0 |
|
|
assert len(manager.categories['anatomy']) > 0 |
|
|
assert len(manager.categories['pathology']) > 0 |
|
|
assert len(manager.categories['modifiers']) > 0 |
|
|
|
|
|
def test_search_term(self): |
|
|
"""Test term search""" |
|
|
manager = MedicalTermManager() |
|
|
manager.add_term("МРТ") |
|
|
manager.add_term("КТ") |
|
|
manager.add_term("МСКТ") |
|
|
|
|
|
|
|
|
results = manager.search_term("МРТ") |
|
|
assert "МРТ" in results |
|
|
|
|
|
|
|
|
results = manager.search_term("КТ") |
|
|
assert len(results) >= 2 |
|
|
|
|
|
def test_get_category_terms(self): |
|
|
"""Test getting terms by category""" |
|
|
manager = MedicalTermManager() |
|
|
manager.add_term("МРТ") |
|
|
manager.add_term("КТ") |
|
|
|
|
|
imaging_terms = manager.get_category_terms('imaging') |
|
|
assert len(imaging_terms) >= 2 |
|
|
|
|
|
def test_get_all_terms(self): |
|
|
"""Test getting all terms""" |
|
|
manager = MedicalTermManager() |
|
|
manager.add_term("МРТ") |
|
|
manager.add_term("КТ") |
|
|
manager.add_term("грыжа") |
|
|
|
|
|
all_terms = manager.get_all_terms() |
|
|
assert len(all_terms) == 3 |
|
|
assert "МРТ" in all_terms |
|
|
|
|
|
def test_get_terms_as_text(self): |
|
|
"""Test getting terms as formatted text""" |
|
|
manager = MedicalTermManager() |
|
|
manager.add_term("МРТ") |
|
|
manager.add_term("КТ") |
|
|
|
|
|
text = manager.get_terms_as_text() |
|
|
assert "МРТ" in text |
|
|
assert "КТ" in text |
|
|
assert ", " in text |
|
|
|
|
|
def test_validate_transcription(self): |
|
|
"""Test transcription validation""" |
|
|
manager = MedicalTermManager() |
|
|
manager.add_term("МРТ") |
|
|
manager.add_term("грыжа") |
|
|
|
|
|
transcription = "Проведено МРТ. Обнаружена грыжа диска." |
|
|
|
|
|
validation = manager.validate_transcription(transcription) |
|
|
assert validation['count'] == 2 |
|
|
assert "МРТ" in validation['found_terms'] |
|
|
assert "грыжа" in validation['found_terms'] |
|
|
|
|
|
def test_statistics(self): |
|
|
"""Test statistics generation""" |
|
|
manager = MedicalTermManager() |
|
|
manager.add_term("МРТ") |
|
|
manager.add_term("Т1-ВИ") |
|
|
manager.add_term("грыжа") |
|
|
|
|
|
stats = manager.get_statistics() |
|
|
assert stats['total_terms'] == 3 |
|
|
assert 'categories' in stats |
|
|
|
|
|
|
|
|
class TestTermLoader: |
|
|
"""Tests for term loading/saving functions""" |
|
|
|
|
|
def test_load_terms_from_file(self): |
|
|
"""Test loading terms from a file""" |
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt', encoding='utf-8') as f: |
|
|
f.write("МРТ, КТ, МСКТ, грыжа") |
|
|
temp_file = Path(f.name) |
|
|
|
|
|
try: |
|
|
terms = load_terms_from_file(temp_file) |
|
|
assert len(terms) == 4 |
|
|
assert "МРТ" in terms |
|
|
assert "КТ" in terms |
|
|
finally: |
|
|
temp_file.unlink() |
|
|
|
|
|
def test_save_terms_to_file(self): |
|
|
"""Test saving terms to a file""" |
|
|
terms = ["МРТ", "КТ", "МСКТ"] |
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f: |
|
|
temp_file = Path(f.name) |
|
|
|
|
|
try: |
|
|
result = save_terms_to_file(terms, temp_file) |
|
|
assert result is True |
|
|
|
|
|
|
|
|
content = temp_file.read_text(encoding='utf-8') |
|
|
assert "МРТ" in content |
|
|
assert "КТ" in content |
|
|
assert "МСКТ" in content |
|
|
finally: |
|
|
temp_file.unlink() |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
pytest.main([__file__, "-v"]) |
|
|
|