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()