from datetime import date from utils import get_billing_period def test_get_billing_period(): assert get_billing_period( billing_day=15, date_=date(2023, 3, 20), ) == (date(2023, 3, 15), date(2023, 4, 14)) assert get_billing_period( billing_day=15, date_=date(2023, 3, 10), ) == (date(2023, 2, 15), date(2023, 3, 14)) # Leap year assert get_billing_period( billing_day=30, date_=date(year=2028, month=2, day=1), ) == ( date(2028, 1, 30), date(2028, 2, 28), ) # Leap year assert get_billing_period( billing_day=29, date_=date(year=2028, month=3, day=1), ) == ( date(2028, 2, 29), date(2028, 3, 28), ) assert get_billing_period( billing_day=28, date_=date(year=2025, month=2, day=28), ) == ( date(2025, 2, 28), date(2025, 3, 27), ) assert get_billing_period( billing_day=5, date_=date(year=2025, month=12, day=1), ) == ( date(2025, 11, 5), date(2025, 12, 4), ) assert get_billing_period(billing_day=25, date_=date(2025, 12, 14)) == ( date(2025, 11, 25), date(2025, 12, 24), ) assert get_billing_period(billing_day=25, date_=date(2025, 1, 14)) == ( date(2024, 12, 25), date(2025, 1, 24), ) assert get_billing_period(10, date(2024, 1, 5)) == ( date(2023, 12, 10), date(2024, 1, 9), )