From 8d7a2b1eea3505a3f9bd9dbfaeebe831099e2169 2020-06-11 18:22:11 From: Brett Smith Date: 2020-06-11 18:22:11 Subject: [PATCH] accrual: Add AccrualPostings.rt_id property. This is like the existing attributes, but it only supports the outgoings report, so don't build it at __init__ time. --- diff --git a/conservancy_beancount/reports/accrual.py b/conservancy_beancount/reports/accrual.py index 164e5c06eeb14259d38dedd32637d24d246a7a8a..e81c7f2f2636a638f402029618657ac0d395ae32 100644 --- a/conservancy_beancount/reports/accrual.py +++ b/conservancy_beancount/reports/accrual.py @@ -258,6 +258,10 @@ class AccrualPostings(core.RelatedPostings): empty = True return self if empty else self[start_index + 1:] + @property + def rt_id(self) -> Union[str, None, Sentinel]: + return self._single_item(self.first_meta_links('rt-id', None)) + class BaseReport: def __init__(self, out_file: TextIO) -> None: diff --git a/tests/test_reports_accrual.py b/tests/test_reports_accrual.py index c4392fc165cb5283570b40fb52adce2cc85d568d..2c5d3af9c5818816e1ade0cc3b1718d86b1609b2 100644 --- a/tests/test_reports_accrual.py +++ b/tests/test_reports_accrual.py @@ -309,6 +309,30 @@ def test_accrual_postings_inconsistent_account(): related = accrual.AccrualPostings(data.Posting.from_txn(txn)) assert related.account is related.INCONSISTENT +def test_accrual_postings_rt_id(): + txn = testutil.Transaction(postings=[ + (ACCOUNTS[0], 10, {'rt-id': 'rt:90'}), + (ACCOUNTS[0], 10, {'rt-id': 'rt:90 rt:92'}), + (ACCOUNTS[0], 10, {'rt-id': 'rt:90 rt:94 rt:92'}), + ]) + related = accrual.AccrualPostings(data.Posting.from_txn(txn)) + assert related.rt_id == 'rt:90' + +def test_accrual_postings_rt_id_inconsistent(): + txn = testutil.Transaction(postings=[ + (ACCOUNTS[0], 10, {'rt-id': 'rt:96'}), + (ACCOUNTS[0], 10, {'rt-id': 'rt:98 rt:96'}), + ]) + related = accrual.AccrualPostings(data.Posting.from_txn(txn)) + assert related.rt_id is related.INCONSISTENT + +def test_accrual_postings_rt_id_none(): + txn = testutil.Transaction(postings=[ + (ACCOUNTS[0], 10), + ]) + related = accrual.AccrualPostings(data.Posting.from_txn(txn)) + assert related.rt_id is None + @pytest.mark.parametrize('acct_name,invoice,day', testutil.combine_values( ACCOUNTS, ['FIXME', '', None, *testutil.NON_STRING_METADATA_VALUES],