reports: Balance.__init__ better handles multiple amounts of same currency.

This is something that should've happened with 3d704e286
but I didn't think of it at the time.
This commit is contained in:
Brett Smith 2020-06-07 11:17:24 -04:00
parent a23d075add
commit 110e5038e1
2 changed files with 23 additions and 1 deletions

View file

@ -90,8 +90,10 @@ class Balance(Mapping[str, data.Amount]):
) -> None:
if tolerance is None:
tolerance = self.TOLERANCE
self._currency_map = {amount.currency: amount for amount in source}
self.tolerance = tolerance
self._currency_map: Dict[str, data.Amount] = {}
for amount in source:
self._add_amount(self._currency_map, amount)
def _add_amount(self,
currency_map: MutableMapping[str, data.Amount],

View file

@ -81,6 +81,26 @@ def test_mixed_balance():
assert not balance.is_zero()
assert all(balance[key] == testutil.Amount(amt, key) for key, amt in amounts.items())
def test_init_recurring_currency():
balance = core.Balance([
testutil.Amount(20),
testutil.Amount(40),
testutil.Amount(60, 'EUR'),
testutil.Amount(-80),
])
assert balance
assert balance['EUR'] == testutil.Amount(60, 'EUR')
assert balance['USD'] == testutil.Amount(-20)
def test_init_zeroed_out():
balance = core.Balance([
testutil.Amount(25),
testutil.Amount(40, 'EUR'),
testutil.Amount(-25),
testutil.Amount(-40, 'EUR'),
])
assert balance.is_zero()
@pytest.mark.parametrize('mapping,expected', [
({}, True),
({'USD': 0}, True),