conservancy_beancount/tests/test_reports_balance.py
2020-04-12 14:56:00 -04:00

68 lines
2.2 KiB
Python

"""test_reports_balance - Unit tests for reports.core.Balance"""
# Copyright © 2020 Brett Smith
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import itertools
from decimal import Decimal
import pytest
from . import testutil
from conservancy_beancount.reports import core
def test_empty_balance():
balance = core.Balance()
assert not balance
assert len(balance) == 0
assert balance.is_zero()
with pytest.raises(KeyError):
balance['USD']
@pytest.mark.parametrize('currencies', [
'USD',
'EUR GBP',
'JPY INR BRL',
])
def test_zero_balance(currencies):
keys = currencies.split()
balance = core.Balance(testutil.balance_map((key, 0) for key in keys))
assert balance
assert len(balance) == len(keys)
assert balance.is_zero()
assert all(balance[key].number == 0 for key in keys)
assert all(balance[key].currency == key for key in keys)
@pytest.mark.parametrize('currencies', [
'USD',
'EUR GBP',
'JPY INR BRL',
])
def test_nonzero_balance(currencies):
amounts = testutil.balance_map(zip(currencies.split(), itertools.count(110, 100)))
balance = core.Balance(amounts.items())
assert balance
assert len(balance) == len(amounts)
assert not balance.is_zero()
assert all(balance[key] == amt for key, amt in amounts.items())
def test_mixed_balance():
amounts = testutil.balance_map(USD=0, EUR=120)
balance = core.Balance(amounts.items())
assert balance
assert len(balance) == 2
assert not balance.is_zero()
assert all(balance[key] == amt for key, amt in amounts.items())