Files
rechnungsgenerator/abrechnung/tests/test_models.py
Claude cfa2266dd9 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
2026-07-10 23:53:56 +00:00

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