usawa

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

entryindex.py (2983B)


      1 import logging
      2 import datetime
      3 import unittest
      4 import os
      5 import uuid
      6 
      7 import lxml.etree
      8 
      9 from usawa import Ledger, UnitIndex, EntryPart, Entry, DemoWallet
     10 from usawa.store import LedgerStore
     11 from usawa.error import AccountError
     12 from usawa.index import EntryIndex
     13 from usawa.xml import nsmap
     14 
     15 logging.basicConfig(level=logging.DEBUG)
     16 logg = logging.getLogger()
     17 
     18 testdir = os.path.realpath(os.path.dirname(__file__))
     19 
     20 class TestEntryIndex(unittest.TestCase):
     21 
     22     def setUp(self):
     23         self.eidx = EntryIndex(digest=True, ref=True)
     24         self.uidx = UnitIndex('FOO')
     25         self.ledger = Ledger(self.uidx, topic=b'bar', entry_index=self.eidx)
     26         self.wallet = DemoWallet()
     27 
     28         dst = EntryPart('FOO.Asset/foo', 1337)
     29         src = EntryPart('FOO.Income/foo', 1337, debit=True)
     30         self.entry_a = Entry(1, datetime.datetime.strptime('2025-11-11', '%Y-%m-%d'), ref=str(uuid.uuid4()), description='foo', unitindex=self.uidx)
     31         o = self.entry_a
     32         o.add_part(src)
     33         o.add_part(dst)
     34         o.sign(self.wallet)
     35         self.ledger.add_entry(o)
     36 
     37         dst = EntryPart('FOO.Expense/bar', 42)
     38         src = EntryPart('FOO.Asset/bar', -42, debit=True)
     39         now = datetime.datetime.now(datetime.UTC)
     40         self.entry_b = Entry(2, now, parent=self.ledger.cur, ref=str(uuid.uuid4()), description='bar', unitindex=self.uidx)
     41         o = self.entry_b
     42         o.add_part(src)
     43         o.add_part(dst)
     44         o.sign(self.wallet)
     45         self.ledger.add_entry(o)
     46 
     47 
     48     def test_entry_check_index(self):
     49         r = self.eidx.get_ref(self.entry_a)
     50         self.assertEqual(r, self.entry_a.ref)
     51         r = self.eidx.get_digest(self.entry_a)
     52         z = self.entry_a.sum()
     53         self.assertEqual(r, z[0])
     54 
     55         r = self.eidx.get_ref(self.entry_b)
     56         self.assertEqual(r, self.entry_b.ref)
     57         r = self.eidx.get_digest(self.entry_b)
     58         z = self.entry_b.sum()
     59         self.assertEqual(r, z[0])
     60 
     61 
     62     @unittest.skip('find why tree export namespace doesnt work (also in ledger)')
     63     def test_entry_export(self):
     64         o = self.eidx.to_tree()
     65         idx = EntryIndex.from_tree(o)
     66         oo = idx.to_tree()
     67         r = idx.get_ref(1)
     68         self.assertEqual(r, self.entry_a.ref)
     69         r = idx.get_ref(2)
     70         self.assertEqual(r, self.entry_b.ref)
     71         z = self.entry_a.sum()[0]
     72         r = idx.get_digest(1)
     73         self.assertEqual(r, z)
     74         z = self.entry_b.sum()[0]
     75         r = idx.get_digest(2)
     76         self.assertEqual(r, z)
     77 
     78 
     79     def test_entry_string_export(self):
     80         s = self.eidx.to_string()
     81         idx = EntryIndex.from_string(s)
     82         r = idx.get_ref(1)
     83         self.assertEqual(r, self.entry_a.ref)
     84         r = idx.get_ref(2)
     85         self.assertEqual(r, self.entry_b.ref)
     86         z = self.entry_a.sum()[0]
     87         r = idx.get_digest(1)
     88         self.assertEqual(r, z)
     89         z = self.entry_b.sum()[0]
     90         r = idx.get_digest(2)
     91         self.assertEqual(r, z)
     92 
     93 
     94 if __name__ == '__main__':
     95     unittest.main()