usawa

Signed, immutable accounting.
Log | Files | Refs | Submodules | LICENSE

accountsindex.py (2237B)


      1 import logging
      2 import datetime
      3 import unittest
      4 import os
      5 
      6 from whee.mem import MemStore
      7 
      8 from usawa import Ledger, UnitIndex, EntryPart, Entry, DemoWallet, ACL, schema_path
      9 from usawa.store import LedgerStore
     10 from usawa.account import AccountIndex, AccountType, AccountDisplay
     11 from usawa.error import AccountError
     12 from usawa.index.account import EntryAccountIndex
     13 
     14 logging.basicConfig(level=logging.DEBUG)
     15 logg = logging.getLogger()
     16 
     17 testdir = os.path.realpath(os.path.dirname(__file__))
     18 
     19 class TestAccountsIndex(unittest.TestCase):
     20 
     21 
     22     def setUp(self):
     23         self.store = MemStore()
     24         self.eidx = EntryAccountIndex()
     25 
     26 
     27     def test_accountsindex(self):
     28         s = 'FOO'
     29         uidx = UnitIndex(s)
     30         wallet = DemoWallet()
     31         o = Ledger(uidx, wallet=wallet)
     32         o.register_callback(self.eidx.entry_callback)
     33         store = LedgerStore(self.store, ledger=o)
     34         store.start()
     35 
     36 
     37         x = EntryPart(s + '.Income/foo', 1337, debit=True)
     38         y = EntryPart(s + '.Asset/foo', 1337)
     39         v = Entry(o.peek(), datetime.datetime.now(), parent=o.current())
     40         v.add_part(x)
     41         v.add_part(y)
     42         v.sign(wallet)
     43         store.add_entry(v, update_ledger=True)
     44 
     45         x = EntryPart(s + '.Expense/bar', 42, debit=True)
     46         y = EntryPart(s + '.Liability/bar', 42)
     47         v = Entry(o.peek(), datetime.datetime.now(), parent=o.current())
     48         v.add_part(x)
     49         v.add_part(y)
     50         v.sign(wallet)
     51         store.add_entry(v, update_ledger=True)
     52 
     53         x = EntryPart(s + '.Expense/bar', 42, debit=True)
     54         y = EntryPart(s + '.Liability/bar', 42)
     55         v = Entry(o.peek(), datetime.datetime.now(), parent=o.current())
     56         v.add_part(x)
     57         v.add_part(y)
     58         v.sign(wallet)
     59         store.add_entry(v, update_ledger=True)
     60 
     61         self.eidx.start('FOO.income/foo')
     62         r = list(self.eidx)
     63         self.assertEqual(len(r), 1)
     64         entry = Entry.empty(serial=r[0])
     65         entry = store.get_entry(entry)
     66 
     67         self.eidx.start('FOO.expense/bar')
     68         r = list(self.eidx)
     69         self.assertEqual(len(r), 2)
     70         for v in r:
     71             entry = Entry.empty(serial=v)
     72             entry = store.get_entry(entry)
     73 
     74 
     75 if __name__ == '__main__':
     76     unittest.main()