M1: Grundgerüst, Datenmodell und Admin
Django-5.2-Projekt mit uv, django-environ und Docker-Compose-Setup (web + Postgres, WeasyPrint-Systembibliotheken im Image). Vollständiges Datenmodell (Firma, Therapeut, Auftraggeber, Teilnehmer, Leistungsart, Leistung, InvoiceLog, InvoiceCounter) mit Admin, Login-Flow und Platzhalter-Dashboard. Fortschritt in FORTSCHRITT.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yy3uodsai6Ytt3GJ7tBdz
This commit is contained in:
46
abrechnung/tests/test_models.py
Normal file
46
abrechnung/tests/test_models.py
Normal file
@@ -0,0 +1,46 @@
|
||||
"""Grundlegende Modelltests (M1). Umfangreichere Tests folgen in M5."""
|
||||
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
|
||||
from abrechnung.models import (
|
||||
Auftraggeber,
|
||||
Leistung,
|
||||
Leistungsart,
|
||||
Teilnehmer,
|
||||
Therapeut,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def leistung(db):
|
||||
therapeut = Therapeut.objects.create(name="Anna Muster", kuerzel="AM")
|
||||
auftraggeber = Auftraggeber.objects.create(
|
||||
name="Jugendamt Musterstadt", strasse="Amtsweg 1", plz="12345", ort="Musterstadt",
|
||||
)
|
||||
teilnehmer = Teilnehmer.objects.create(
|
||||
name="Max Klient", auftraggeber=auftraggeber, therapeut=therapeut,
|
||||
)
|
||||
art = Leistungsart.objects.create(
|
||||
bezeichnung="Sitzung", standard_stundensatz=Decimal("80.00"),
|
||||
)
|
||||
return Leistung.objects.create(
|
||||
therapeut=therapeut, teilnehmer=teilnehmer, leistungsart=art,
|
||||
datum=date(2026, 5, 4), stundenanzahl=Decimal("1.50"),
|
||||
stundensatz=Decimal("80.00"),
|
||||
)
|
||||
|
||||
|
||||
def test_betrag_is_hours_times_rate(leistung):
|
||||
assert leistung.betrag == Decimal("120.00")
|
||||
|
||||
|
||||
def test_auftraggeber_derived_via_teilnehmer(leistung):
|
||||
assert leistung.auftraggeber == leistung.teilnehmer.auftraggeber
|
||||
assert leistung.auftraggeber.name == "Jugendamt Musterstadt"
|
||||
|
||||
|
||||
def test_leistung_starts_unbilled(leistung):
|
||||
assert leistung.abgerechnet_mit is None
|
||||
Reference in New Issue
Block a user