Add delete and remove operations for entry management
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user