diff --git a/conservancy_beancount/plugin/meta_approval.py b/conservancy_beancount/plugin/meta_approval.py index 169cc4f888649c5f831a7b8379414088526a39ea..2a441c8a6791c2193e2f89b5f010a458143f51c8 100644 --- a/conservancy_beancount/plugin/meta_approval.py +++ b/conservancy_beancount/plugin/meta_approval.py @@ -27,6 +27,10 @@ from ..beancount_types import ( class MetaApproval(core._RequireLinksPostingMetadataHook): CHECKED_METADATA = ['approval'] SKIP_FLAGS = '!' + SKIP_TAX_IMPLICATIONS = frozenset([ + 'Bank-Transfer', + 'Chargeback', + ]) def __init__(self, config: configmod.Config) -> None: self.payment_threshold = -config.payment_threshold() @@ -48,5 +52,5 @@ class MetaApproval(core._RequireLinksPostingMetadataHook): return ( post.account.is_cash_equivalent() and post.units.number < 0 - and post.meta.get('tax-implication', '').title() != 'Chargeback' + and str(post.meta.get('tax-implication')).title() not in self.SKIP_TAX_IMPLICATIONS ) diff --git a/tests/test_meta_approval.py b/tests/test_meta_approval.py index 76179ba52551f7f52f09e662f3ca39481dfc2087..affbc3dbd74d71ad7adf22f0ce6e8fbb44bf53b7 100644 --- a/tests/test_meta_approval.py +++ b/tests/test_meta_approval.py @@ -163,24 +163,14 @@ def test_approval_not_required_to_pay_credit_card(hook): ('Bank-Transfer', 'Assets:Savings'), ('Chargeback', 'Income:Donations'), ]) -def test_approval_not_required_for_asset_transfers(hook, tax_implication, other_acct): +def test_approval_not_required_by_tax_implication(hook, tax_implication, other_acct): txn = testutil.Transaction(postings=[ ('Assets:Checking', -250, {'tax-implication': tax_implication}), - (other_acct, 250), + (other_acct, 245), + ('Expenses:BankingFees', 5), ]) assert not list(hook.run(txn)) -def test_approval_required_for_partial_transfer(hook): - # I'm not sure this ever comes up in reality, but just being thorough - # out of an abundance of precaution. - txn = testutil.Transaction(postings=[ - ('Assets:Checking', -250, {'tax-implication': 'Bank-Transfer'}), - ('Assets:Savings', 225), - ('Expenses:BankingFees', 25), - ]) - actual = {error.message for error in hook.run(txn)} - assert actual == {"Assets:Checking missing {}".format(TEST_KEY)} - def test_not_required_on_flagged(hook): txn = testutil.Transaction(flag='!', postings=[ ('Assets:Checking', -25),