books: Add Loader.dispatch() classmethod.
This commit is contained in:
parent
f3c3ebcf59
commit
3721226d17
2 changed files with 62 additions and 0 deletions
|
@ -254,3 +254,16 @@ class Loader:
|
|||
'lineno': lineno,
|
||||
}
|
||||
return LoadResult.empty(Error(source, "no books to load in configuration", None))
|
||||
|
||||
@classmethod
|
||||
def dispatch(cls,
|
||||
loader: Optional['Loader'],
|
||||
from_fy: Optional[Year]=None,
|
||||
to_fy: Optional[Year]=None,
|
||||
) -> LoadResult:
|
||||
if loader is None:
|
||||
return cls.load_none()
|
||||
elif to_fy is None:
|
||||
return loader.load_all(from_fy)
|
||||
else:
|
||||
return loader.load_fy_range(from_fy or 0, to_fy)
|
||||
|
|
|
@ -225,3 +225,52 @@ def test_load_none_no_args():
|
|||
assert errors
|
||||
assert all(isinstance(err.source['filename'], str) for err in errors)
|
||||
assert all(isinstance(err.source['lineno'], int) for err in errors)
|
||||
|
||||
def test_dispatch_empty():
|
||||
result = books.Loader.dispatch(None)
|
||||
assert not result.entries
|
||||
assert result.errors
|
||||
|
||||
@pytest.mark.parametrize('from_arg', [
|
||||
None,
|
||||
*range(2018, 2021),
|
||||
date(2019, 2, 1),
|
||||
date(2019, 9, 15),
|
||||
date(2020, 1, 20),
|
||||
date(2020, 5, 31),
|
||||
])
|
||||
def test_dispatch_load_all_from_year(conservancy_loader, from_arg):
|
||||
try:
|
||||
from_year = from_arg.year
|
||||
except AttributeError:
|
||||
from_year = from_arg or 2018
|
||||
else:
|
||||
if from_arg.month < FY_START_MONTH:
|
||||
from_year -= 1
|
||||
result = books.Loader.dispatch(conservancy_loader, from_arg)
|
||||
check_openings(result.entries)
|
||||
actual_years = txn_years(result.entries)
|
||||
assert actual_years.issuperset(range(from_year, 2021))
|
||||
assert min(actual_years) == from_year
|
||||
assert not result.errors
|
||||
|
||||
@pytest.mark.parametrize('from_arg,to_arg,expected', [
|
||||
(2019, 2019, range(2019, 2020)),
|
||||
(0, 2019, range(2019, 2020)),
|
||||
(2018, 2019, range(2018, 2020)),
|
||||
(1, 2018, range(2018, 2020)),
|
||||
(-1, 2019, range(2018, 2020)),
|
||||
(2019, 2020, range(2019, 2021)),
|
||||
(1, 2019, range(2019, 2021)),
|
||||
(-1, 2020, range(2019, 2021)),
|
||||
(2010, 2030, range(2018, 2021)),
|
||||
(20, 2010, range(2018, 2021)),
|
||||
(-20, 2030, range(2018, 2021)),
|
||||
])
|
||||
def test_dispatch_load_all_fy_range(conservancy_loader, from_arg, to_arg, expected):
|
||||
result = books.Loader.dispatch(conservancy_loader, from_arg, to_arg)
|
||||
check_openings(result.entries)
|
||||
actual_years = txn_years(result.entries)
|
||||
assert actual_years.issuperset(iter(expected))
|
||||
assert min(actual_years) == expected.start
|
||||
assert not result.errors
|
||||
|
|
Loading…
Reference in a new issue