From 8d7a2b1eea3505a3f9bd9dbfaeebe831099e2169 Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Thu, 11 Jun 2020 14:22:11 -0400 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. --- conservancy_beancount/reports/accrual.py | 4 ++++ tests/test_reports_accrual.py | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/conservancy_beancount/reports/accrual.py b/conservancy_beancount/reports/accrual.py index 164e5c0..e81c7f2 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 c4392fc..2c5d3af 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],