def test_insert_entry_align(tmpdir): file_content = dedent(""" 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD """) samplefile = tmpdir.mkdir('fava_util_file3').join('example.beancount') samplefile.write(file_content) postings = [ data.Posting('Liabilities:US:Chase:Slate', amount.Amount(D('-10.00'), 'USD'), None, None, None, None), data.Posting('Expenses:Food', amount.Amount(D('10.00'), 'USD'), None, None, None, None), ] transaction = data.Transaction(None, datetime.date(2016, 1, 1), '*', 'new payee', 'narr', None, None, postings) fava_options = { 'currency-column': 50, } insert_entry(transaction, [str(samplefile)], fava_options) assert samplefile.read() == dedent(""" 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """)
def test_insert_entry_align(tmpdir): file_content = dedent( """ 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD """ ) samplefile = tmpdir.mkdir("fava_util_file3").join("example.beancount") samplefile.write(file_content) postings = [ data.Posting( "Liabilities:US:Chase:Slate", amount.Amount(D("-10.00"), "USD"), None, None, None, None, ), data.Posting( "Expenses:Food", amount.Amount(D("10.00"), "USD"), None, None, None, None, ), ] transaction = data.Transaction( {}, datetime.date(2016, 1, 1), "*", "new payee", "narr", None, None, postings, ) fava_options = {"currency-column": 50} insert_entry(transaction, [str(samplefile)], fava_options) assert samplefile.read() == dedent( """ 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ )
def test_insert_entry_align(tmp_path) -> None: file_content = dedent("""\ 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD """) samplefile = tmp_path / "example.beancount" samplefile.write_text(file_content) postings = [ Posting( "Liabilities:US:Chase:Slate", A("-10.00 USD"), None, None, None, None, ), Posting( "Expenses:Food", A("10.00 USD"), None, None, None, None, ), ] transaction = Transaction( {}, date(2016, 1, 1), "*", "new payee", "narr", None, None, postings, ) insert_entry(transaction, str(samplefile), [], 50) assert samplefile.read_text("utf-8") == dedent("""\ 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """)
def test_insert_entry_transaction(tmp_path) -> None: file_content = dedent( """\ 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD """ ) samplefile = tmp_path / "example.beancount" samplefile.write_text(file_content) postings = [ Posting( "Liabilities:US:Chase:Slate", A("-10.00 USD"), None, None, None, None, ), Posting("Expenses:Food", A("10.00 USD"), None, None, None, None), ] transaction = Transaction( {}, date(2016, 1, 1), "*", "new payee", "narr", None, None, postings, ) # Test insertion without "insert-entry" options. insert_entry(transaction, str(samplefile), [], 61) assert samplefile.read_text("utf-8") == dedent( """\ 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ ) # Verify that InsertEntryOptions with dates greater or equal than the # transaction dates are ignored. options = [ InsertEntryOption( date(2015, 1, 1), re.compile(".*:Food"), str(samplefile), 1, ), InsertEntryOption( date(2015, 1, 2), re.compile(".*:FOOO"), str(samplefile), 1, ), InsertEntryOption( date(2017, 1, 1), re.compile(".*:Food"), str(samplefile), 6, ), ] new_options = insert_entry( transaction._replace(narration="narr1"), str(samplefile), options, 61 ) assert new_options[0].lineno == 5 assert new_options[1].lineno == 5 assert new_options[2].lineno == 10 assert samplefile.read_text("utf-8") == dedent( """\ 2016-01-01 * "new payee" "narr1" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ ) # Verify that previous postings are matched against InsertEntryOptions when # the last posting doesn't match. options = [ InsertEntryOption( date(2015, 1, 1), re.compile(".*:Slate"), str(samplefile), 5, ), InsertEntryOption( date(2015, 1, 2), re.compile(".*:FOOO"), str(samplefile), 1, ), ] transaction = transaction._replace(narration="narr2") new_options = insert_entry(transaction, str(samplefile), options, 61) assert new_options[0].lineno == 9 assert new_options[1].lineno == 1 assert samplefile.read_text("utf-8") == dedent( """\ 2016-01-01 * "new payee" "narr1" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr2" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ ) # Verify that preference is given to InsertEntryOptions with later dates in # case several of them match a posting. options = [ InsertEntryOption( date(2015, 1, 1), re.compile(".*:Food"), str(samplefile), 5, ), InsertEntryOption( date(2015, 1, 2), re.compile(".*:Food"), str(samplefile), 1, ), ] transaction = transaction._replace(narration="narr3") insert_entry(transaction, str(samplefile), options, 61) assert samplefile.read_text("utf-8") == dedent( """\ 2016-01-01 * "new payee" "narr3" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr1" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr2" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ )
def test_insert_entry_transaction(tmpdir): file_content = dedent( """ 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD """ ) samplefile = tmpdir.mkdir("fava_util_file3").join("example.beancount") samplefile.write(file_content) postings = [ data.Posting( "Liabilities:US:Chase:Slate", amount.Amount(D("-10.00"), "USD"), None, None, None, None, ), data.Posting( "Expenses:Food", amount.Amount(D("10.00"), "USD"), None, None, None, None, ), ] transaction = data.Transaction( {}, datetime.date(2016, 1, 1), "*", "new payee", "narr", None, None, postings, ) # Test insertion without "insert-entry" options. insert_entry(transaction, [str(samplefile)], {}) assert samplefile.read() == dedent( """ 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ ) # Verify that InsertEntryOptions with dates greater or equal than the # transaction dates are ignored. options = [ InsertEntryOption( datetime.date(2015, 1, 1), re.compile(".*:Food"), str(samplefile), 2, ), InsertEntryOption( datetime.date(2015, 1, 2), re.compile(".*:FOOO"), str(samplefile), 2, ), InsertEntryOption( datetime.date(2017, 1, 1), re.compile(".*:Food"), str(samplefile), 6, ), ] transaction = transaction._replace(narration="narr1") insert_entry(transaction, [str(samplefile)], {"insert-entry": options}) assert samplefile.read() == dedent( """ 2016-01-01 * "new payee" "narr1" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ ) # Verify that previous postings are matched against InsertEntryOptions when # the last posting doesn't match. options = [ InsertEntryOption( datetime.date(2015, 1, 1), re.compile(".*:Slate"), str(samplefile), 6, ), InsertEntryOption( datetime.date(2015, 1, 2), re.compile(".*:FOOO"), str(samplefile), 2, ), ] transaction = transaction._replace(narration="narr2") insert_entry(transaction, [str(samplefile)], {"insert-entry": options}) assert samplefile.read() == dedent( """ 2016-01-01 * "new payee" "narr1" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr2" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ ) # Verify that preference is given to InsertEntryOptions with later dates in # case several of them match a posting. options = [ InsertEntryOption( datetime.date(2015, 1, 1), re.compile(".*:Food"), str(samplefile), 6, ), InsertEntryOption( datetime.date(2015, 1, 2), re.compile(".*:Food"), str(samplefile), 2, ), ] transaction = transaction._replace(narration="narr3") insert_entry(transaction, [str(samplefile)], {"insert-entry": options}) assert samplefile.read() == dedent( """ 2016-01-01 * "new payee" "narr3" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr1" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr2" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """ )
def test_insert_entry_transaction(tmpdir): file_content = dedent(""" 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD """) samplefile = tmpdir.mkdir("fava_util_file3").join("example.beancount") samplefile.write(file_content) postings = [ data.Posting( "Liabilities:US:Chase:Slate", amount.Amount(D("-10.00"), "USD"), None, None, None, None, ), data.Posting( "Expenses:Food", amount.Amount(D("10.00"), "USD"), None, None, None, None, ), ] transaction = data.Transaction( None, datetime.date(2016, 1, 1), "*", "new payee", "narr", None, None, postings, ) insert_entry(transaction, [str(samplefile)], {}) assert samplefile.read() == dedent(""" 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """) options = [ InsertEntryOption( datetime.date(2015, 1, 1), re.compile(".*:Food"), str(samplefile), 2, ), InsertEntryOption( datetime.date(2015, 1, 2), re.compile(".*:FOOO"), str(samplefile), 2, ), InsertEntryOption( datetime.date(2017, 1, 1), re.compile(".*:Food"), str(samplefile), 6, ), ] insert_entry(transaction, [str(samplefile)], {"insert-entry": options}) assert samplefile.read() == dedent(""" 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """) options = [ InsertEntryOption( datetime.date(2015, 1, 1), re.compile(".*:Slate"), str(samplefile), 5, ), InsertEntryOption( datetime.date(2015, 1, 2), re.compile(".*:FOOO"), str(samplefile), 2, ), ] insert_entry(transaction, [str(samplefile)], {"insert-entry": options}) assert samplefile.read() == dedent(""" 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """)
def test_insert_entry_transaction(tmpdir): file_content = dedent(""" 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD """) samplefile = tmpdir.mkdir('fava_util_file3').join('example.beancount') samplefile.write(file_content) postings = [ data.Posting('Liabilities:US:Chase:Slate', amount.Amount(D('-10.00'), 'USD'), None, None, None, None), data.Posting('Expenses:Food', amount.Amount(D('10.00'), 'USD'), None, None, None, None), ] transaction = data.Transaction(None, datetime.date(2016, 1, 1), '*', 'new payee', 'narr', None, None, postings) insert_entry(transaction, [str(samplefile)], {}) assert samplefile.read() == dedent(""" 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """) options = [ InsertEntryOption( datetime.date(2015, 1, 1), re.compile('.*:Food'), str(samplefile), 2), InsertEntryOption( datetime.date(2015, 1, 2), re.compile('.*:FOOO'), str(samplefile), 2), InsertEntryOption( datetime.date(2017, 1, 1), re.compile('.*:Food'), str(samplefile), 6), ] insert_entry(transaction, [str(samplefile)], {'insert-entry': options}) assert samplefile.read() == dedent(""" 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """) options = [ InsertEntryOption( datetime.date(2015, 1, 1), re.compile('.*:Slate'), str(samplefile), 5), InsertEntryOption( datetime.date(2015, 1, 2), re.compile('.*:FOOO'), str(samplefile), 2), ] insert_entry(transaction, [str(samplefile)], {'insert-entry': options}) assert samplefile.read() == dedent(""" 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """)
def test_insert_entry_transaction(tmpdir): file_content = dedent(""" 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD """) samplefile = tmpdir.mkdir('fava_util_file3').join('example.beancount') samplefile.write(file_content) postings = [ data.Posting('Liabilities:US:Chase:Slate', amount.Amount(D('-10.00'), 'USD'), None, None, None, None), data.Posting('Expenses:Food', amount.Amount(D('10.00'), 'USD'), None, None, None, None), ] transaction = data.Transaction(None, datetime.date(2016, 1, 1), '*', 'new payee', 'narr', None, None, postings) insert_entry(transaction, [str(samplefile)], []) assert samplefile.read() == dedent(""" 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """) options = [ InsertEntryOption(datetime.date(2015, 1, 1), re.compile('.*:Food'), str(samplefile), 2), InsertEntryOption(datetime.date(2015, 1, 2), re.compile('.*:FOOO'), str(samplefile), 2), InsertEntryOption(datetime.date(2017, 1, 1), re.compile('.*:Food'), str(samplefile), 6), ] insert_entry(transaction, [str(samplefile)], options) assert samplefile.read() == dedent(""" 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """) options = [ InsertEntryOption(datetime.date(2015, 1, 1), re.compile('.*:Slate'), str(samplefile), 5), InsertEntryOption(datetime.date(2015, 1, 2), re.compile('.*:FOOO'), str(samplefile), 2), ] insert_entry(transaction, [str(samplefile)], options) assert samplefile.read() == dedent(""" 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD 2016-02-26 * "Uncle Boons" "Eating out alone" Liabilities:US:Chase:Slate -24.84 USD Expenses:Food:Restaurant 24.84 USD 2016-01-01 * "new payee" "narr" Liabilities:US:Chase:Slate -10.00 USD Expenses:Food 10.00 USD """)