from datetime import datetime from decimal import Decimal from finance.flow import Flow, simulate def test_flow_integration() -> None: fl = Flow( amount=Decimal(3000.0), since=datetime(2023, 1, 1), until=datetime(2026, 1, 5), ) tests = ( (datetime(2024, 3, 12), datetime(2024, 4, 2), Decimal(3000.0)), (datetime(2024, 3, 1), datetime(2024, 3, 15), Decimal(3000.0)), (datetime(2024, 2, 25), datetime(2024, 3, 1), Decimal(3000.0)), (datetime(2024, 2, 25), datetime(2024, 6, 12), Decimal(12000.0)), (datetime(2022, 1, 5), datetime(2022, 9, 14), Decimal(0.0)), (datetime(2022, 1, 5), datetime(2023, 1, 1), Decimal(3000.0)), (datetime(2022, 7, 4), datetime(2024, 12, 8), Decimal(72000.0)), (datetime(2025, 11, 4), datetime(2026, 5, 9), Decimal(6000.0)), (datetime(2026, 1, 5), datetime(2027, 1, 1), Decimal(0.0)), (datetime(2027, 5, 28), datetime(2028, 7, 7), Decimal(0.0)), ) for test in tests: assert fl.integrate(start=test[0], end=test[1]) == test[2] def test_simulate() -> None: flows = (Flow(amount=Decimal(100.0), since=None, until=None),) simulated = simulate( start=datetime(2024, 1, 1), end=datetime(2024, 4, 1), flows=flows, ) expected = [ (datetime(2024, 1, 1), Decimal(100.0)), (datetime(2024, 2, 1), Decimal(200.0)), (datetime(2024, 3, 1), Decimal(300.0)), (datetime(2024, 4, 1), Decimal(400.0)), ] assert simulated == expected