mirror of
https://github.com/complexcaresolutions/dak.c2s.git
synced 2026-03-17 20:43:41 +00:00
112 lines
4 KiB
Python
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")
|