Files @ e79877ee6a3f
Branch filter:

Location: NPO-Accounting/conservancy_beancount/tests/test_data_is_opening_balance_txn.py

Brett Smith
data: Add rt-id to LINK_METADATA.

This gets closer to our real intentions: anything that checks link
metadata should check rt-id. MetaRepoLinks is the exception, not
the rule, in ignoring rt-id.
"""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 <https://www.gnu.org/licenses/>.

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)