- Run tests for all 10 services via per-service pytest subprocesses - Group results by service with section headers - Clickable summary cards filter by outcome (passed/failed/errors/skipped) - Service filter nav using ~nav-link buttons in menu bar - Full menu integration: ~header-row + ~header-child + ~menu-row - Show logo image via cart-mini rendering - Mount full service directories in docker-compose for test access - Add 24 unit test files across 9 services Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
"""Unit tests for calendar/ticket total functions."""
|
|
from __future__ import annotations
|
|
|
|
from decimal import Decimal
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from cart.bp.cart.services.calendar_cart import calendar_total, ticket_total
|
|
|
|
|
|
def _entry(cost):
|
|
return SimpleNamespace(cost=cost)
|
|
|
|
|
|
def _ticket(price):
|
|
return SimpleNamespace(price=price)
|
|
|
|
|
|
class TestCalendarTotal:
|
|
def test_empty(self):
|
|
assert calendar_total([]) == 0
|
|
|
|
def test_single_entry(self):
|
|
assert calendar_total([_entry(25.0)]) == Decimal("25.0")
|
|
|
|
def test_none_cost_excluded(self):
|
|
result = calendar_total([_entry(None)])
|
|
assert result == 0
|
|
|
|
def test_zero_cost(self):
|
|
# cost=0 is falsy, so it produces Decimal(0) via the else branch
|
|
result = calendar_total([_entry(0)])
|
|
assert result == Decimal("0")
|
|
|
|
def test_multiple(self):
|
|
result = calendar_total([_entry(10.0), _entry(20.0)])
|
|
assert result == Decimal("30.0")
|
|
|
|
|
|
class TestTicketTotal:
|
|
def test_empty(self):
|
|
assert ticket_total([]) == Decimal("0")
|
|
|
|
def test_single_ticket(self):
|
|
assert ticket_total([_ticket(15.0)]) == Decimal("15.0")
|
|
|
|
def test_none_price_treated_as_zero(self):
|
|
# ticket_total includes all tickets, None → Decimal(0)
|
|
result = ticket_total([_ticket(None)])
|
|
assert result == Decimal("0")
|
|
|
|
def test_multiple(self):
|
|
result = ticket_total([_ticket(5.0), _ticket(10.0)])
|
|
assert result == Decimal("15.0")
|
|
|
|
def test_mixed_with_none(self):
|
|
result = ticket_total([_ticket(10.0), _ticket(None), _ticket(5.0)])
|
|
assert result == Decimal("15.0")
|