usawa

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

commit d84c3737b7da930feded7c56b966dd9669a38185
parent ad861a4e91d1a290498d9172383ed3adee61ba14
Author: lash <dev@holbrook.no>
Date:   Sun, 24 May 2026 09:31:41 -0600

Add test for update link entry

Diffstat:
Mdummy/tests/link.py | 39+++++++++++++++++++++++++++++++++++++++
Mdummy/usawa/entry.py | 3++-
Mdummy/usawa/index/__init__.py | 1+
Mdummy/usawa/link.py | 4+++-
4 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/dummy/tests/link.py b/dummy/tests/link.py @@ -14,6 +14,7 @@ logg = logging.getLogger() testdir = os.path.realpath(os.path.dirname(__file__)) + class TestLink(unittest.TestCase): def setUp(self): @@ -115,5 +116,43 @@ class TestLink(unittest.TestCase): self.assertEqual(r[0], 666) + def test_link_store_update(self): + wallet = DemoWallet() + uu = uuid.uuid4() + db = MemStore() + store = LedgerStore(db, self.ledger) + entry_a = Entry(serial=42, tx_date=datetime.datetime.now(datetime.UTC), ref=str(uu)) + entry_b = Entry(serial=666, tx_date=datetime.datetime.now(datetime.UTC)) + entry_c = Entry(serial=1337, tx_date=datetime.datetime.now(datetime.UTC)) + self.linker.link_to(entry_a, entry_b) + entry_a.sign(wallet) + store.add_entry(entry_a, linker=self.linker) + entry_b.sign(wallet) + store.add_entry(entry_b, linker=self.linker) + entry_c.sign(wallet) + store.add_entry(entry_c) + + linker = EntryLink(self.ledger) + entry_a_recover = store.get_entry(entry_a, linker=linker) + store.get_entry(entry_b, linker=linker) + linker.link_to(entry_a, entry_c) + print(">>>>>>>>>> have links {}".format(linker.links)) + store.add_entry(entry_c, overwrite=True, linker=linker) + + linker_updated = EntryLink(self.ledger) + entry_a_updated = store.get_entry(entry_a, linker=linker_updated) + store.get_entry(entry_b, linker=linker_updated) + store.get_entry(entry_c, linker=linker_updated) + r = linker_updated.get_for(entry_c) + self.assertEqual(len(r), 2) + self.assertEqual(r[0], 42) + self.assertEqual(r[1], 666) + + r = linker_updated.get_for(entry_a) + self.assertEqual(len(r), 2) + self.assertEqual(r[0], 666) + self.assertEqual(r[1], 1337) + + if __name__ == '__main__': unittest.main() diff --git a/dummy/usawa/entry.py b/dummy/usawa/entry.py @@ -410,6 +410,7 @@ class Entry(UsawaElement): link = None if linker != None: link = linker.get(self) + logg.debug('ser add link {}'.format(link)) if link != None: link = uuid.UUID(link) link = link.bytes @@ -471,7 +472,6 @@ class Entry(UsawaElement): pass if extref != None: extref = extref.decode('utf-8') - logg.debug('extref {}'.format(extref)) date_reg = datetime.datetime.strptime(v[4].decode('utf-8'), '%Y%m%d%H%M%S') date = datetime.datetime.strptime(v[5].decode('utf-8'), '%Y%m%d%H%M%S') description = v[6].decode('utf-8') @@ -512,6 +512,7 @@ class Entry(UsawaElement): if link != None: if linker != None: + logg.debug('applying link {}'.format(link)) linker.link(o, link_uuid=str(link)) logg.debug('deserialized entry {}'.format(o)) diff --git a/dummy/usawa/index/__init__.py b/dummy/usawa/index/__init__.py @@ -0,0 +1 @@ +from .entry import EntryIndex diff --git a/dummy/usawa/link.py b/dummy/usawa/link.py @@ -46,12 +46,13 @@ class EntryLink: return v + # serial to serial list def get_for(self, entry): v = self.get(entry) if v == None: return None r = [] - logg.debug('link {} found for entry {}'.format(v, entry)) + logg.debug('(serial) link {} found for entry {}'.format(v, entry)) for v in self.links[v]: if v == entry.serial: continue @@ -59,6 +60,7 @@ class EntryLink: return r + # serial to link ref def get(self, entry): v = self.idx.get(entry.serial) if v != None: