first ruggedy draft

This commit is contained in:
2026-06-28 13:48:15 +02:00
parent c916f64fcb
commit 1053f6a2a3
78 changed files with 20905 additions and 2 deletions

70
tests/test_projects.py Normal file
View File

@@ -0,0 +1,70 @@
from __future__ import annotations
from datetime import date
from decimal import Decimal
from mousehold_api import models
from mousehold_api.services.projects import calculate_project_summary
from mousehold_domain import (
PaymentLineStatus,
PaymentStatus,
PlanningStatus,
ProjectStatus,
ReconciliationStatus,
SettlementStatus,
)
from sqlalchemy.orm import Session
def test_project_partial_payment_summary(
session: Session,
household_setup: dict[str, str],
) -> None:
project = models.Project(
household_id=household_setup["household_id"],
name="Stockholm 2026",
status=ProjectStatus.ACTIVE,
currency="EUR",
)
session.add(project)
session.flush()
budget_line = models.ProjectBudgetLine(
project_id=project.id,
name="Accommodation",
budgeted_amount=Decimal("800.00"),
)
session.add(budget_line)
session.flush()
item = models.ProjectPlannedItem(
project_id=project.id,
budget_line_id=budget_line.id,
description="Hotel",
estimated_amount=Decimal("800.00"),
committed_amount=Decimal("760.00"),
due_date=date(2026, 8, 12),
planning_status=PlanningStatus.COMMITTED,
payment_status=PaymentStatus.PARTIALLY_PAID,
reconciliation_status=ReconciliationStatus.EMAIL_SEEN,
settlement_status=SettlementStatus.UNSETTLED,
)
session.add(item)
session.flush()
session.add(
models.PaymentLine(
planned_item_id=item.id,
amount=Decimal("200.00"),
currency="EUR",
date=date(2026, 1, 5),
paid_by_user_id=household_setup["user_a_id"],
status=PaymentLineStatus.PAID,
)
)
session.commit()
summary = calculate_project_summary(session, project.id)
assert summary.budgeted_total == Decimal("800.00")
assert summary.committed_total == Decimal("760.00")
assert summary.paid_total == Decimal("200.00")
assert summary.due_later_total == Decimal("560.00")
assert summary.remaining_uncommitted_budget == Decimal("40.00")