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
47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
"""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
|