@@ -16,8 +16,32 @@
import pytest
from . import testutil
from datetime import date as Date
from beancount.core.data import Open, Close, Booking
from conservancy_beancount import data
clean_account_meta = pytest.fixture()(testutil.clean_account_meta)
def check_account_meta(acct_meta, opening, closing=None):
if isinstance(acct_meta, str):
acct_meta = data.Account(acct_meta).meta
assert acct_meta == opening.meta
assert acct_meta.account == opening.account
assert acct_meta.booking == opening.booking
assert acct_meta.currencies == opening.currencies
assert acct_meta.open_date == opening.date
assert acct_meta.open_meta == opening.meta
if closing is None:
assert acct_meta.close_date is None
assert acct_meta.close_meta is None
else:
assert acct_meta.close_date == closing.date
assert acct_meta.close_meta == closing.meta
@pytest.mark.parametrize('acct_name,under_arg,expected', [
('Expenses:Tax:Sales', 'Expenses:Tax:Sales:', False),
('Expenses:Tax:Sales', 'Expenses:Tax:Sales', True),
@@ -205,3 +229,41 @@ def test_root_part(acct_name):
assert account.root_part() == parts[0]
assert account.root_part(1) == parts[0]
assert account.root_part(2) == ':'.join(parts[:2])
def test_load_opening(clean_account_meta):
opening = Open({'lineno': 210}, Date(2010, 2, 1), 'Assets:Cash', None, None)
data.Account.load_opening(opening)
check_account_meta('Assets:Cash', opening)
def test_load_closing(clean_account_meta):
name = 'Assets:Checking'
opening = Open({'lineno': 230}, Date(2010, 10, 1), name, None, None)
closing = Close({'lineno': 235}, Date(2010, 11, 1), name)
data.Account.load_closing(closing)
check_account_meta(name, opening, closing)
def test_load_closing_without_opening(clean_account_meta):
closing = Close({'lineno': 245}, Date(2010, 3, 1), 'Assets:Cash')
with pytest.raises(ValueError):
def test_load_openings_and_closings(clean_account_meta):
entries = [
Open({'lineno': 1, 'income-type': 'Donations'},
Date(2000, 3, 1), 'Income:Donations', None, None),
Open({'lineno': 2},
Date(2000, 3, 1), 'Income:Other', None, None),
Open({'lineno': 3, 'asset-type': 'Cash equivalent'},
Date(2000, 4, 1), 'Assets:Checking', ['USD', 'EUR'], Booking.STRICT),
testutil.Transaction(date=Date(2000, 4, 10), postings=[
('Income:Donations', -10),
('Assets:Checking', 10),
]),
Close({'lineno': 30, 'why': 'Changed banks'},
Date(2000, 5, 1), 'Assets:Checking')
]
data.Account.load_openings_and_closings(iter(entries))
check_account_meta('Income:Donations', entries[0])
check_account_meta('Income:Other', entries[1])
check_account_meta('Assets:Checking', entries[2], entries[-1])