reports: Add Balance.__str__() method.
This commit is contained in:
parent
5a1f7122bd
commit
68acb86e7e
2 changed files with 18 additions and 0 deletions
|
@ -60,6 +60,13 @@ class Balance(Mapping[str, data.Amount]):
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"{type(self).__name__}({self._currency_map!r})"
|
return f"{type(self).__name__}({self._currency_map!r})"
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
amounts = [amount for amount in self.values() if amount.number]
|
||||||
|
if not amounts:
|
||||||
|
return "Zero balance"
|
||||||
|
amounts.sort(key=lambda amt: abs(amt.number), reverse=True)
|
||||||
|
return ', '.join(str(amount) for amount in amounts)
|
||||||
|
|
||||||
def __getitem__(self, key: str) -> data.Amount:
|
def __getitem__(self, key: str) -> data.Amount:
|
||||||
return data.Amount(self._currency_map[key], key)
|
return data.Amount(self._currency_map[key], key)
|
||||||
|
|
||||||
|
|
|
@ -66,3 +66,14 @@ def test_mixed_balance():
|
||||||
assert len(balance) == 2
|
assert len(balance) == 2
|
||||||
assert not balance.is_zero()
|
assert not balance.is_zero()
|
||||||
assert all(balance[key] == amt for key, amt in amounts.items())
|
assert all(balance[key] == amt for key, amt in amounts.items())
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('balance_map_kwargs,expected', [
|
||||||
|
({}, "Zero balance"),
|
||||||
|
({'JPY': 0, 'BRL': 0}, "Zero balance"),
|
||||||
|
({'USD': '20.00'}, "20.00 USD"),
|
||||||
|
({'EUR': '50.00', 'GBP': '80.00'}, "80.00 GBP, 50.00 EUR"),
|
||||||
|
({'JPY': '-55.00', 'BRL': '-85.00'}, "-85.00 BRL, -55.00 JPY"),
|
||||||
|
])
|
||||||
|
def test_str(balance_map_kwargs, expected):
|
||||||
|
amounts = testutil.balance_map(**balance_map_kwargs)
|
||||||
|
assert str(core.Balance(amounts.items())) == expected
|
||||||
|
|
Loading…
Reference in a new issue