Skip to content
Snippets Groups Projects
Commit 21371b1c authored by Daniele Nicolodi's avatar Daniele Nicolodi
Browse files

tests: Some tests for beanutils

parent cce357e8
No related branches found
No related tags found
No related merge requests found
import io
import textwrap
import unittest
import beanutils
import orders
from beancount.parser import parser
def parse(x):
entries, errors, options = parser.parse_string(textwrap.dedent(x))
assert not errors
return entries
class TestMerge(unittest.TestCase):
def assertMetadata(self, entry, value):
meta = {k: v for k, v in entry.meta.items() if k not in ('filename', 'lineno')}
self.assertEqual(meta, value)
def assertPostingAccounts(self, entry, value):
accounts = {p.account for p in entry.postings}
self.assertEqual(accounts, value)
def test_merge_simple(self):
existing = parse("""
2021-01-01 ! "Test"
alpha: "a"
beta: "b"
Assets:Cash -2.00 USD
Expenses:Test
""")
entries = parse("""
2021-01-02 * "New"
alpha: "a"
new: "new"
Assets:Cash -2.00 USD
Expenses:Test
""")
r = orders.merge_entries(existing, entries)
self.assertEqual(len(r), 2)
self.assertMetadata(r[0], {'alpha': 'a', 'beta': 'b', '__duplicate__': True})
self.assertMetadata(r[1], {'alpha': 'a', 'beta': 'b', 'new': 'new'})
self.assertEqual(r[1].narration, 'Test')
self.assertPostingAccounts(r[1], {'Assets:Cash', 'Expenses:Test'})
def test_merge_postings(self):
existing = parse("""
2021-01-01 ! "Test"
alpha: "a"
beta: "b"
Assets:Cash -2.00 USD
Expenses:Test
""")
entries = parse("""
2021-01-02 * "New"
alpha: "a"
new: "new"
Assets:Cash -2.00 USD
""")
r = orders.merge_entries(existing, entries)
self.assertPostingAccounts(r[1], {'Assets:Cash', 'Expenses:Test'})
class TestPrinter(unittest.TestCase):
def test_printer(self):
entries = parse("""
2021-01-01 * "Example"
Expenses:Foo 1.00 USD
Expenses:Bar 100.00 USD
Assets:Cash
2021-01-01 * "Example"
Expenses:Foo 1.00 USD
Expenses:Bar 1.00 USD
2021-01-01 * "Example"
Expenses:Foo 100.00 USD
Assets:Cash
2021-01-01 * "Example"
Expenses:Foo 100.00 CAD @ 1.10 USD
Assets:Cash
""")
entries[1].meta['__duplicate__'] = True
out = io.StringIO()
beanutils.print_entries(entries, out)
self.assertEqual(out.getvalue(), textwrap.dedent("""
2021-01-01 * "Example"
Expenses:Foo 1.00 USD
Expenses:Bar 100.00 USD
Assets:Cash
; 2021-01-01 * "Example"
; Expenses:Foo 1.00 USD
; Expenses:Bar 1.00 USD
2021-01-01 * "Example"
Expenses:Foo 100.00 USD
Assets:Cash
2021-01-01 * "Example"
Expenses:Foo 100.00 CAD @ 1.10 USD
Assets:Cash
"""))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment