Changeset - 16c47c64b23d
[Not reviewed]
0 3 0
Brett Smith - 4 years ago 2020-03-05 19:37:47
brettcsmith@brettcsmith.org
expenseAllocation: Date-limit the transactions we work on.

This prevents the plugin from giving meaning to postings that
might not really be there.
3 files changed with 43 insertions and 1 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/plugin/core.py
Show inline comments
...
 
@@ -16,6 +16,27 @@
 

	
 
import datetime
 

	
 
from . import errors as errormod
 

	
 
DEFAULT_START_DATE = datetime.date(2020, 3, 1)
 
DEFAULT_STOP_DATE = datetime.date(datetime.MAXYEAR, 1, 1)
 

	
 
class _GenericRange:
 
    def __init__(self, start, stop):
 
        self.start = start
 
        self.stop = stop
 

	
 
    def __repr__(self):
 
        return "{clsname}({self.start!r}, {self.stop!r})".format(
 
            clsname=type(self).__name__,
 
            self=self,
 
        )
 

	
 
    def __contains__(self, item):
 
        return self.start <= item < self.stop
 

	
 

	
 
class PostingChecker:
 
    ACCOUNTS = ('',)
 
    TXN_DATE_RANGE = _GenericRange(DEFAULT_START_DATE, DEFAULT_STOP_DATE)
 
    VALUES_ENUM = {}
...
 
@@ -37,3 +58,3 @@ class PostingChecker:
 
    def _should_check(self, txn, post):
 
        ok = True
 
        ok = txn.date in self.TXN_DATE_RANGE
 
        if isinstance(self.ACCOUNTS, tuple):
tests/test_meta_expenseAllocation.py
Show inline comments
...
 
@@ -111 +111,19 @@ def test_default_values(account, set_value):
 
    assert txn.postings[-1].meta['expenseAllocation'] == set_value
 

	
 
@pytest.mark.parametrize('date,set_value', [
 
    (testutil.EXTREME_FUTURE_DATE, False),
 
    (testutil.FUTURE_DATE, True),
 
    (testutil.FY_START_DATE, True),
 
    (testutil.FY_MID_DATE, True),
 
    (testutil.PAST_DATE, False),
 
])
 
def test_default_value_set_in_date_range(date, set_value):
 
    txn = testutil.Transaction(date=date, postings=[
 
        ('Liabilites:CreditCard', -25),
 
        ('Expenses:General', 25),
 
    ])
 
    checker = meta_expense_allocation.MetaExpenseAllocation()
 
    errors = checker.check(txn, txn.postings[-1])
 
    assert not errors
 
    got_value = (txn.postings[-1].meta or {}).get('expenseAllocation')
 
    assert bool(got_value) == bool(set_value)
tests/testutil.py
Show inline comments
...
 
@@ -23,4 +23,7 @@ from decimal import Decimal
 

	
 
EXTREME_FUTURE_DATE = datetime.date(datetime.MAXYEAR, 12, 30)
 
FUTURE_DATE = datetime.date.today() + datetime.timedelta(days=365 * 99)
 
FY_START_DATE = datetime.date(2020, 3, 1)
 
FY_MID_DATE = datetime.date(2020, 9, 1)
 
PAST_DATE = datetime.date(2000, 1, 1)
 

	
0 comments (0 inline, 0 general)