diff --git a/tests/testutil.py b/tests/testutil.py index 7eaf304ca8cb22d8f803269fffcf4ab61104de58..36120912781589a5caa289523335df4377f49ad7 100644 --- a/tests/testutil.py +++ b/tests/testutil.py @@ -93,6 +93,37 @@ def Posting(account, number, meta, ) +def Transaction(date=FY_MID_DATE, flag='*', payee=None, + narration='', tags=None, links=None, postings=(), + **meta): + if isinstance(date, str): + date = parse_date(date) + meta.setdefault('filename', '') + meta.setdefault('lineno', 0) + real_postings = [] + for post in postings: + try: + post.account + except AttributeError: + if isinstance(post[-1], dict): + args = post[:-1] + kwargs = post[-1] + else: + args = post + kwargs = {} + post = Posting(*args, **kwargs) + real_postings.append(post) + return bc_data.Transaction( + meta, + date, + flag, + payee, + narration, + set(tags or ''), + set(links or ''), + real_postings, + ) + LINK_METADATA_STRINGS = { 'Invoices/304321.pdf', 'rt:123/456', @@ -130,59 +161,16 @@ def balance_map(source=None, **kwargs): retval.update(balance_map(kwargs.items())) return retval -class Transaction: - def __init__(self, - date=FY_MID_DATE, flag='*', payee=None, - narration='', tags=None, links=None, postings=None, - **meta): - if isinstance(date, str): - date = parse_date(date) - self.date = date - self.flag = flag - self.payee = payee - self.narration = narration - self.tags = set(tags or '') - self.links = set(links or '') - self.postings = [] - self.meta = { - 'filename': '', - 'lineno': 0, - } - self.meta.update(meta) - if postings is not None: - for posting in postings: - self.add_posting(*posting) - - def add_posting(self, arg, *args, **kwargs): - """Add a posting to this transaction. Use any of these forms: - - txn.add_posting(account, number, …, kwarg=value, …) - txn.add_posting(account, number, …, posting_kwargs_dict) - txn.add_posting(posting_object) - """ - if kwargs: - posting = Posting(arg, *args, **kwargs) - elif args: - if isinstance(args[-1], dict): - kwargs = args[-1] - args = args[:-1] - posting = Posting(arg, *args, **kwargs) - else: - posting = arg - self.postings.append(posting) - - @classmethod - def opening_balance(cls, acct=None, **txn_meta): - if acct is None: - acct = next(OPENING_EQUITY_ACCOUNTS) - return cls(**txn_meta, postings=[ - ('Assets:Receivable:Accounts', 100), - ('Assets:Receivable:Loans', 200), - ('Liabilities:Payable:Accounts', -15), - ('Liabilities:Payable:Vacation', -25), - (acct, -260), - ]) - +def OpeningBalance(acct=None, **txn_meta): + if acct is None: + acct = next(OPENING_EQUITY_ACCOUNTS) + return Transaction(**txn_meta, postings=[ + ('Assets:Receivable:Accounts', 100), + ('Assets:Receivable:Loans', 200), + ('Liabilities:Payable:Accounts', -15), + ('Liabilities:Payable:Vacation', -25), + (acct, -260), + ]) class TestConfig: def __init__(self, *,