Add delete and remove operations for entry management

This commit is contained in:
2026-02-21 21:44:28 +01:00
parent 662d47ac21
commit 4a04bf50c4
4 changed files with 156 additions and 3 deletions

View File

@@ -1,3 +1,4 @@
import json
import os.path
import shutil
@@ -73,6 +74,15 @@ def dummy_obj_with_ref():
return DummyObjWithRef(1, "a", data)
def load_head(engine, tenant_id):
head_path = os.path.join(engine._get_user_root(tenant_id), engine.HeadFile)
try:
with open(head_path, 'r') as file:
return json.load(file)
except FileNotFoundError:
return {}
def test_i_can_test_init():
if os.path.exists(DB_ENGINE_ROOT):
shutil.rmtree(DB_ENGINE_ROOT)
@@ -271,3 +281,59 @@ def test_i_can_retrieve_history_using_save(engine):
assert v2["key1"] == DummyObj(1, "a", False)
assert v2[TAG_PARENT] == [None]
def test_i_can_delete_entries(engine):
digest1 = engine.save(FAKE_TENANT_ID, FAKE_USER_EMAIL, "MyEntry", {"key1": DummyObj(1, "a", False)})
digest2 = engine.save(FAKE_TENANT_ID, FAKE_USER_EMAIL, "MyEntry2", {"key1": DummyObj(2, "b", True)})
res = engine.delete(FAKE_TENANT_ID, FAKE_USER_EMAIL, "MyEntry")
assert res is True
# entry is no longer in the head
head = load_head(engine, FAKE_TENANT_ID)
assert "MyEntry" not in head
assert "MyEntry2" in head
# digests are not removed from the db
assert engine.load(FAKE_TENANT_ID, "MyEntry2", digest1) is not None
assert engine.load(FAKE_TENANT_ID, "MyEntry2", digest2) is not None
def test_i_can_delete_an_entry_that_does_not_exist(engine):
# no exception should be raised
res = engine.delete(FAKE_TENANT_ID, FAKE_USER_EMAIL, "MyEntry")
assert res is False
def test_i_can_remove_an_key_from_an_entry(engine):
engine.save(FAKE_TENANT_ID,
FAKE_USER_EMAIL,
"MyEntry",
{
"key1": DummyObj(1, "a", False),
"key2": DummyObj(2, "b", True)
})
res = engine.remove(FAKE_TENANT_ID, FAKE_USER_EMAIL, "MyEntry", "key1")
assert res is True
snapshot = engine.load(FAKE_TENANT_ID, "MyEntry")
assert "key1" not in snapshot
assert "key2" in snapshot
def test_i_can_remove_a_key_that_does_not_exist(engine):
# no exception should be raised
res = engine.remove(FAKE_TENANT_ID, FAKE_USER_EMAIL, "MyEntry", "key1")
assert res is False
def test_removing_the_last_key_from_an_entry_not_not_delete_the_entry(engine):
engine.save(FAKE_TENANT_ID, FAKE_USER_EMAIL, "MyEntry", {"key1": DummyObj(1, "a", False)})
res = engine.remove(FAKE_TENANT_ID, FAKE_USER_EMAIL, "MyEntry", "key1")
assert res is True
snapshot = engine.load(FAKE_TENANT_ID, "MyEntry")
assert "key1" not in snapshot
assert snapshot[TAG_PARENT] is not None