mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-07-01 19:26:53 +02:00
feat: initialize CCMA member administration
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
from datetime import date
|
||||
|
||||
import pytest
|
||||
|
||||
from ccma.domain.dates import (
|
||||
DateValidationError,
|
||||
age_label,
|
||||
calculate_age,
|
||||
format_date_for_display,
|
||||
normalize_date_input,
|
||||
parse_date_input,
|
||||
parse_iso_date,
|
||||
validate_birth_date,
|
||||
validate_member_dates,
|
||||
)
|
||||
|
||||
|
||||
def test_iso_dates_are_strict_and_real() -> None:
|
||||
assert parse_iso_date("2024-02-29", "Datum") == date(2024, 2, 29)
|
||||
for value in ("29.02.2024", "2024-2-29", "2023-02-29", "irgendwas"):
|
||||
with pytest.raises(DateValidationError):
|
||||
parse_iso_date(value, "Datum")
|
||||
|
||||
|
||||
def test_date_input_accepts_german_and_iso_formats() -> None:
|
||||
expected = date(2024, 2, 29)
|
||||
assert parse_date_input("29.02.2024", "Datum") == expected
|
||||
assert parse_date_input("2024-02-29", "Datum") == expected
|
||||
assert normalize_date_input("29.02.2024", "Datum") == "2024-02-29"
|
||||
|
||||
|
||||
def test_date_display_uses_system_pattern(monkeypatch) -> None:
|
||||
monkeypatch.setattr("ccma.domain.dates.system_date_pattern", lambda: "%d.%m.%Y")
|
||||
assert format_date_for_display("2024-02-29") == "29.02.2024"
|
||||
monkeypatch.setattr("ccma.domain.dates.system_date_pattern", lambda: "%Y-%m-%d")
|
||||
assert format_date_for_display("2024-02-29") == "2024-02-29"
|
||||
|
||||
|
||||
def test_birth_date_checks_future_and_plausibility() -> None:
|
||||
today = date(2026, 6, 21)
|
||||
assert validate_birth_date("2000-06-22", today=today) == date(2000, 6, 22)
|
||||
with pytest.raises(DateValidationError, match="Zukunft"):
|
||||
validate_birth_date("2026-06-22", today=today)
|
||||
with pytest.raises(DateValidationError, match="120"):
|
||||
validate_birth_date("1900-01-01", today=today)
|
||||
|
||||
|
||||
def test_member_dates_must_be_chronological() -> None:
|
||||
with pytest.raises(DateValidationError, match="Aufnahmebeschluss"):
|
||||
validate_member_dates(
|
||||
birth_date="2000-01-01",
|
||||
accepted_at="2020-01-02",
|
||||
membership_started_at="2020-01-01",
|
||||
today=date(2026, 6, 21),
|
||||
)
|
||||
|
||||
|
||||
def test_age_calculation_and_label() -> None:
|
||||
today = date(2026, 6, 21)
|
||||
assert calculate_age(date(2000, 6, 21), today) == 26
|
||||
assert calculate_age(date(2000, 6, 22), today) == 25
|
||||
assert age_label("2000-06-21", today=today) == "Alter: 26 Jahre"
|
||||
assert age_label("nein", today=today) == "UNGÜLTIGES DATUM"
|
||||
Reference in New Issue
Block a user