diff --git a/tests/test_books_loader.py b/tests/test_books_loader.py index 7b3ce6dacb1d46cef0439665f39ad6f1e3503db3..6f9b1a554945955e3367352f30d12b4989429eb2 100644 --- a/tests/test_books_loader.py +++ b/tests/test_books_loader.py @@ -27,11 +27,13 @@ from . import testutil from beancount.core import data as bc_data from conservancy_beancount import books +FY_START_MONTH = 3 + books_path = testutil.test_path('books') @pytest.fixture(scope='module') def conservancy_loader(): - return books.Loader(books_path, books.FiscalYear(3)) + return books.Loader(books_path, books.FiscalYear(FY_START_MONTH)) def check_openings(entries): openings = collections.defaultdict(int) @@ -41,18 +43,13 @@ def check_openings(entries): for account, count in openings.items(): assert count == 1, f"found {count} open directives for {account}" -def check_narrations(entries, expected): - expected = iter(expected) - expected_next = next(expected) +def txn_dates(entries): for entry in entries: - if (isinstance(entry, bc_data.Transaction) - and entry.narration == expected_next): - try: - expected_next = next(expected) - except StopIteration: - break - else: - assert None, f"{expected_next} not found in entry narrations" + if isinstance(entry, bc_data.Transaction): + yield entry.date + +def txn_years(entries): + return frozenset(date.year for date in txn_dates(entries)) @pytest.mark.parametrize('from_fy,to_fy,expect_years', [ (2019, 2019, range(2019, 2020)), @@ -70,7 +67,7 @@ def check_narrations(entries, expected): def test_load_fy_range(conservancy_loader, from_fy, to_fy, expect_years): entries, errors, options_map = conservancy_loader.load_fy_range(from_fy, to_fy) assert not errors - check_narrations(entries, [f'{year} donation' for year in expect_years]) + assert txn_years(entries).issuperset(expect_years) def test_load_fy_range_does_not_duplicate_openings(conservancy_loader): entries, errors, options_map = conservancy_loader.load_fy_range(2010, 2030) @@ -82,8 +79,25 @@ def test_load_fy_range_empty(conservancy_loader): assert not entries assert not options_map -def test_load_all(conservancy_loader): - entries, errors, options_map = conservancy_loader.load_all() +@pytest.mark.parametrize('from_year', [None, *range(2018, 2021)]) +def test_load_all(conservancy_loader, from_year): + entries, errors, options_map = conservancy_loader.load_all(from_year) + from_year = from_year or 2018 + assert not errors + check_openings(entries) + assert txn_years(entries).issuperset(range(from_year or 2018, 2021)) + +@pytest.mark.parametrize('from_date', [ + date(2019, 2, 1), + date(2019, 9, 15), + date(2020, 1, 20), + date(2020, 5, 31), +]) +def test_load_all_from_date(conservancy_loader, from_date): + from_year = from_date.year + if from_date.month < FY_START_MONTH: + from_year -= 1 + entries, errors, options_map = conservancy_loader.load_all(from_date) assert not errors - check_narrations(entries, [f'{year} donation' for year in range(2018, 2021)]) check_openings(entries) + assert txn_years(entries).issuperset(range(from_year, 2021))