Files
@ 3a4c8526b2b2
Branch filter:
Location: NPO-Accounting/conservancy_beancount/tests/test_meta_entity.py - annotation
3a4c8526b2b2
3.2 KiB
text/x-python
meta_entity: Not required for Equity accounts.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 2cb131423f97 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 2cb131423f97 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 3a4c8526b2b2 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 ad268f049df6 | """Test validation of entity metadata"""
# 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 pytest
from . import testutil
from conservancy_beancount.plugin import meta_entity
VALID_VALUES = {
'Smith-Alex',
'Company19',
'boyd-danah',
'B-van-der-A',
}
INVALID_VALUES = {
'-foo',
'foo-',
'-',
'Überentity',
'Alex Smith',
' ',
'',
}
TEST_KEY = 'entity'
@pytest.fixture(scope='module')
def hook():
config = testutil.TestConfig()
return meta_entity.MetaEntity(config)
@pytest.mark.parametrize('src_value', VALID_VALUES)
def test_valid_values_on_postings(hook, src_value):
txn = testutil.Transaction(postings=[
('Assets:Cash', -25),
('Expenses:General', 25, {TEST_KEY: src_value}),
])
assert not any(hook.run(txn))
@pytest.mark.parametrize('src_value', INVALID_VALUES)
def test_invalid_values_on_postings(hook, src_value):
txn = testutil.Transaction(postings=[
('Assets:Cash', -25),
('Expenses:General', 25, {TEST_KEY: src_value}),
])
errors = list(hook.run(txn))
assert len(errors) == 1
assert errors[0].message == "Expenses:General has invalid entity: {}".format(src_value)
@pytest.mark.parametrize('src_value', VALID_VALUES)
def test_valid_values_on_transactions(hook, src_value):
txn = testutil.Transaction(**{TEST_KEY: src_value}, postings=[
('Assets:Cash', -25),
('Expenses:General', 25),
])
assert not any(hook.run(txn))
@pytest.mark.parametrize('src_value', INVALID_VALUES)
def test_invalid_values_on_transactions(hook, src_value):
txn = testutil.Transaction(**{TEST_KEY: src_value}, postings=[
('Assets:Cash', -25),
('Expenses:General', 25),
])
errors = list(hook.run(txn))
assert 1 <= len(errors) <= 2
assert all(error.message == "transaction has invalid entity: {}".format(src_value)
for error in hook.run(txn))
@pytest.mark.parametrize('account,required', [
('Accrued:AccountsReceivable', True),
('Assets:Cash', False),
('Equity:OpeningBalances', False),
('Expenses:General', True),
('Income:Donations', True),
('Liabilities:CreditCard', False),
('UnearnedIncome:Donations', True),
])
def test_which_accounts_required_on(hook, account, required):
txn = testutil.Transaction(postings=[
('Assets:Checking', 25),
(account, 25),
])
errors = list(hook.run(txn))
if not required:
assert not errors
else:
assert errors
assert any(error.message == "{} missing entity".format(account)
for error in errors)
|