first ruggedy draft
This commit is contained in:
70
tests/test_projects.py
Normal file
70
tests/test_projects.py
Normal 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")
|
||||
Reference in New Issue
Block a user