diff --git a/conservancy_beancount/reports/core.py b/conservancy_beancount/reports/core.py index 9c0ae798bb891aeba9307b0c50b554c6d89770b2..cf5a39a7ca440f6073cfa68165533c37ceccc5ab 100644 --- a/conservancy_beancount/reports/core.py +++ b/conservancy_beancount/reports/core.py @@ -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], diff --git a/tests/test_reports_balance.py b/tests/test_reports_balance.py index 3a424b405be9846968db6acf3bf92c199ef56ed2..22271857aadd74662da6ad4c8d0b375e987356a1 100644 --- a/tests/test_reports_balance.py +++ b/tests/test_reports_balance.py @@ -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),