"""Test data.is_opening_balance_txn function""" # 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 . from decimal import Decimal import pytest from . import testutil from conservancy_beancount import data def test_typical_opening(): txn = testutil.Transaction.opening_balance() assert data.is_opening_balance_txn(txn) def test_multiacct_opening(): txn = testutil.Transaction(postings=[ ('Assets:Receivable:Accounts', 100), (next(testutil.OPENING_EQUITY_ACCOUNTS), -100), ('Liabilities:Payable:Accounts', -150), (next(testutil.OPENING_EQUITY_ACCOUNTS), 150), ]) assert data.is_opening_balance_txn(txn) def test_opening_with_fx(): txn = testutil.Transaction.opening_balance() equity_post = txn.postings[-1] txn.postings[-1] = equity_post._replace( units=testutil.Amount(equity_post.units.number * Decimal('.9'), 'EUR'), cost=testutil.Cost('1.11111'), ) assert data.is_opening_balance_txn(txn) @pytest.mark.parametrize('acct1,acct2,number', [ ('Assets:Receivable:Accounts', 'Income:Donations', 100), ('Expenses:Other', 'Liabilities:Payable:Accounts', 200), ('Expenses:Other', 'Equity:Retained:Costs', 300), # Release from restriction ('Equity:Funds:Unrestricted', 'Equity:Funds:Restricted', 400), ]) def test_not_opening_balance(acct1, acct2, number): txn = testutil.Transaction(postings=[ (acct1, number), (acct2, -number), ]) assert not data.is_opening_balance_txn(txn)