dak.c2s/backend/tests/test_utils.py
2026-02-24 07:41:09 +00:00

112 lines
4 KiB
Python

"""Tests for utility functions: fallgruppe mapping, KW/date utils, validators."""
from datetime import date
import pytest
from app.utils.fallgruppe_map import map_modul_to_fallgruppe
from app.utils.kw_utils import date_to_jahr, date_to_kw, parse_german_date
from app.utils.validators import (
normalize_icd_hauptgruppe,
split_icd_codes,
validate_icd,
validate_kvnr,
)
# ── Fallgruppe mapping ─────────────────────────────────────────────
class TestFallgruppeMapping:
def test_map_exact_matches(self):
assert map_modul_to_fallgruppe("Zweitmeinung Onkologie") == "onko"
assert map_modul_to_fallgruppe("Zweitmeinung Kardiologie") == "kardio"
assert map_modul_to_fallgruppe("Zweitmeinung Intensiv") == "intensiv"
assert map_modul_to_fallgruppe("Zweitmeinung Gallenblase") == "galle"
assert map_modul_to_fallgruppe("Zweitmeinung Schilddrüse") == "sd"
def test_map_with_whitespace(self):
assert map_modul_to_fallgruppe(" Zweitmeinung Onkologie ") == "onko"
def test_map_begutachtung_onko(self):
assert map_modul_to_fallgruppe("Begutachtung Onkologie") == "onko"
def test_map_begutachtung_herz(self):
assert map_modul_to_fallgruppe("Begutachtung Herz") == "kardio"
def test_map_unknown_raises(self):
with pytest.raises(ValueError, match="Cannot map module"):
map_modul_to_fallgruppe("Unknown Module")
# ── KW / Date utils ────────────────────────────────────────────────
class TestKWUtils:
def test_date_to_kw(self):
# 2026-02-24 is a Tuesday in KW 9
assert date_to_kw(date(2026, 2, 24)) == 9
def test_date_to_jahr_boundary(self):
# 2025-12-31 is a Wednesday — ISO week 1 of 2026
assert date_to_kw(date(2025, 12, 31)) == 1
assert date_to_jahr(date(2025, 12, 31)) == 2026
class TestParseGermanDate:
def test_parse_german_date_ddmmyy(self):
assert parse_german_date("02.02.26") == date(2026, 2, 2)
def test_parse_german_date_ddmmyyyy(self):
assert parse_german_date("28.04.1960") == date(1960, 4, 28)
def test_parse_german_date_with_time(self):
assert parse_german_date("02.02.26, 08:50") == date(2026, 2, 2)
def test_parse_german_date_bad_year(self):
with pytest.raises(ValueError, match="Year out of range"):
parse_german_date("29.08.0196")
def test_parse_german_date_empty(self):
with pytest.raises(ValueError, match="Empty date string"):
parse_german_date("")
# ── Validators ──────────────────────────────────────────────────────
class TestValidateICD:
def test_validate_icd_valid(self):
assert validate_icd("C50.1") == "C50.1"
assert validate_icd("c50") == "C50"
def test_validate_icd_invalid(self):
with pytest.raises(ValueError, match="Invalid ICD code format"):
validate_icd("XYZ")
with pytest.raises(ValueError, match="Empty ICD code"):
validate_icd("")
class TestSplitICDCodes:
def test_split_icd_codes_comma(self):
assert split_icd_codes("C50.1, C79.5") == ["C50.1", "C79.5"]
def test_split_icd_codes_semicolon(self):
assert split_icd_codes("C50.1;C79.5") == ["C50.1", "C79.5"]
def test_split_icd_codes_empty(self):
assert split_icd_codes("") == []
class TestNormalizeHauptgruppe:
def test_normalize_hauptgruppe(self):
assert normalize_icd_hauptgruppe("C50.1") == "C50"
class TestValidateKVNR:
def test_validate_kvnr_valid(self):
assert validate_kvnr("D410126355") == "D410126355"
def test_validate_kvnr_invalid(self):
with pytest.raises(ValueError, match="Invalid KVNR format"):
validate_kvnr("123456789")