"""Tests for formatter utilities."""
from src.formatter import (
create_invoice_summary,
format_currency,
format_date,
format_invoice_details_markdown,
format_invoice_list_markdown,
get_days_overdue,
)
from src.models import OracleApiResponse, OracleInvoice
def test_format_currency():
"""Test currency formatting."""
assert format_currency(1000.50) == "$1,000.50"
assert format_currency(0) == "$0.00"
assert format_currency(1234567.89) == "$1,234,567.89"
def test_create_invoice_summary():
"""Test invoice summary creation."""
mock_invoice = OracleInvoice(
InvoiceId=123,
InvoiceNumber="INV-001",
CustomerName="Test Corp",
CustomerId=456,
InvoiceDate="2024-01-15T00:00:00Z",
DueDate="2024-02-15T00:00:00Z",
InvoiceCurrencyCode="USD",
InvoiceAmount=1000.0,
OutstandingAmount=500.0,
PaidAmount=500.0,
InvoiceStatus="Open",
CreationDate="2024-01-14T00:00:00Z",
LastUpdateDate="2024-01-15T00:00:00Z",
)
api_response = OracleApiResponse(
items=[mock_invoice],
count=1,
hasMore=False,
limit=20,
offset=0,
totalResults=1,
)
summary = create_invoice_summary(api_response)
assert summary.count == 1
assert summary.totalAmount == 1000.0
assert summary.totalOutstanding == 500.0
assert len(summary.items) == 1
def test_format_invoice_list_markdown():
"""Test invoice list markdown formatting."""
mock_invoice = OracleInvoice(
InvoiceId=123,
InvoiceNumber="INV-001",
CustomerName="Test Corp",
CustomerId=456,
InvoiceDate="2024-01-15T00:00:00Z",
DueDate="2024-02-15T00:00:00Z",
InvoiceCurrencyCode="USD",
InvoiceAmount=1000.0,
OutstandingAmount=500.0,
PaidAmount=500.0,
InvoiceStatus="Open",
CreationDate="2024-01-14T00:00:00Z",
LastUpdateDate="2024-01-15T00:00:00Z",
)
api_response = OracleApiResponse(
items=[mock_invoice],
count=1,
hasMore=False,
limit=20,
offset=0,
)
summary = create_invoice_summary(api_response)
markdown = format_invoice_list_markdown(summary)
assert "# Invoice Summary" in markdown
assert "INV-001" in markdown
assert "Test Corp" in markdown
assert "$1,000.00" in markdown
def test_format_invoice_details_markdown():
"""Test invoice details markdown formatting."""
mock_invoice = OracleInvoice(
InvoiceId=123,
InvoiceNumber="INV-001",
CustomerName="Test Corp",
CustomerId=456,
InvoiceDate="2024-01-15T00:00:00Z",
DueDate="2024-02-15T00:00:00Z",
InvoiceCurrencyCode="USD",
InvoiceAmount=1000.0,
OutstandingAmount=500.0,
PaidAmount=500.0,
InvoiceStatus="Open",
PaymentTerms="Net 30",
CreationDate="2024-01-14T00:00:00Z",
LastUpdateDate="2024-01-15T00:00:00Z",
)
markdown = format_invoice_details_markdown(mock_invoice)
assert "# Invoice Details: INV-001" in markdown
assert "## Summary" in markdown
assert "## Dates" in markdown
assert "## Payment Information" in markdown
assert "## Customer Information" in markdown
assert "Net 30" in markdown