From 5a2dfaa80ec486c01d62f617c703be0eca5a344f Mon Sep 17 00:00:00 2001 From: eggmasonvalue <215011718+eggmasonvalue@users.noreply.github.com> Date: Thu, 19 Mar 2026 18:05:18 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=AA=20[testing=20improvement]=20Add=20?= =?UTF-8?q?tests=20and=20error=20handling=20for=20get=5Fdate=5Frange?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds a dedicated test file (`tests/test_cli.py`) with comprehensive test cases for the `get_date_range` function in `src/first_filings/cli.py`. It also updates `get_date_range` to explicitly raise a `ValueError` for invalid period strings, replacing the previous silent fallback to "day". Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- src/first_filings/cli.py | 3 +- tests/test_cli.py | 77 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 tests/test_cli.py diff --git a/src/first_filings/cli.py b/src/first_filings/cli.py index e238988..666d2aa 100644 --- a/src/first_filings/cli.py +++ b/src/first_filings/cli.py @@ -36,8 +36,7 @@ def get_date_range(date_obj, period): month = ((to_date.month - 1) // 3) * 3 + 1 from_date = to_date.replace(month=month, day=1) else: - # Fallback to day - from_date = to_date + raise ValueError(f"Invalid period: {period}") return from_date, to_date diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..91d4a51 --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,77 @@ +from datetime import datetime +import pytest + +from first_filings.cli import get_date_range + + +def test_get_date_range_day(): + date_obj = datetime(2023, 10, 25) + from_date, to_date = get_date_range(date_obj, "day") + assert from_date == date_obj + assert to_date == date_obj + + +def test_get_date_range_wtd(): + # Wednesday + date_obj = datetime(2023, 10, 25) + from_date, to_date = get_date_range(date_obj, "wtd") + # Monday of that week + assert from_date == datetime(2023, 10, 23) + assert to_date == date_obj + + # Monday + date_obj_mon = datetime(2023, 10, 23) + from_date_mon, to_date_mon = get_date_range(date_obj_mon, "wtd") + assert from_date_mon == datetime(2023, 10, 23) + assert to_date_mon == date_obj_mon + + # Sunday + date_obj_sun = datetime(2023, 10, 29) + from_date_sun, to_date_sun = get_date_range(date_obj_sun, "wtd") + assert from_date_sun == datetime(2023, 10, 23) + assert to_date_sun == date_obj_sun + + +def test_get_date_range_mtd(): + date_obj = datetime(2023, 10, 25) + from_date, to_date = get_date_range(date_obj, "mtd") + assert from_date == datetime(2023, 10, 1) + assert to_date == date_obj + + # 1st of the month + date_obj_1st = datetime(2023, 10, 1) + from_date_1st, to_date_1st = get_date_range(date_obj_1st, "mtd") + assert from_date_1st == datetime(2023, 10, 1) + assert to_date_1st == date_obj_1st + + +def test_get_date_range_qtd(): + # Q1: January - March + date_obj_q1 = datetime(2023, 2, 15) + from_date, to_date = get_date_range(date_obj_q1, "qtd") + assert from_date == datetime(2023, 1, 1) + assert to_date == date_obj_q1 + + # Q2: April - June + date_obj_q2 = datetime(2023, 5, 10) + from_date, to_date = get_date_range(date_obj_q2, "qtd") + assert from_date == datetime(2023, 4, 1) + assert to_date == date_obj_q2 + + # Q3: July - September + date_obj_q3 = datetime(2023, 9, 30) + from_date, to_date = get_date_range(date_obj_q3, "qtd") + assert from_date == datetime(2023, 7, 1) + assert to_date == date_obj_q3 + + # Q4: October - December + date_obj_q4 = datetime(2023, 12, 31) + from_date, to_date = get_date_range(date_obj_q4, "qtd") + assert from_date == datetime(2023, 10, 1) + assert to_date == date_obj_q4 + + +def test_get_date_range_invalid_period(): + date_obj = datetime(2023, 10, 25) + with pytest.raises(ValueError, match="Invalid period: ytd"): + get_date_range(date_obj, "ytd")