agentcache / tests /test_forget.py
Yash030's picture
refactor: folder-based memory model replacing session-based storage
fbcb300
Raw
History Blame Contribute Delete
3.37 kB
"""Unit tests for forget() folder-based deletion (REQ-029–REQ-033)."""
import sys
import os
import pytest
import datetime
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))
from db import StateKV
from functions import folder_observe, forget, KV
def make_kv(tmp_path):
db_path = os.path.join(str(tmp_path), 'test.db')
return StateKV(db_path=db_path)
def add_obs(kv, folder='/home/user/proj', agent='kiro', n=1):
ids = []
for i in range(n):
result = folder_observe(kv, {
'folderPath': folder,
'agentId': agent,
'text': f'observation {i}',
'timestamp': datetime.datetime.utcnow().isoformat() + 'Z',
})
ids.append(result['observationId'])
return ids
class TestForgetFullPair:
def test_full_deletion_clears_obs(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv, n=3)
fp = 'home/user/proj'
result = forget(kv, {'folderPath': '/home/user/proj', 'agentId': 'kiro'})
assert result['deleted'] >= 3
obs = kv.list(KV.folder_obs(fp, 'kiro'))
assert len(obs) == 0
def test_full_deletion_removes_index_entry(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv)
fp = 'home/user/proj'
forget(kv, {'folderPath': '/home/user/proj', 'agentId': 'kiro'})
entry = kv.get(KV.folders, f'{fp}:kiro')
assert entry is None
def test_full_deletion_removes_meta(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv)
fp = 'home/user/proj'
forget(kv, {'folderPath': '/home/user/proj', 'agentId': 'kiro'})
meta = kv.get(KV.folder_meta(fp, 'kiro'), 'meta')
assert meta is None
def test_deleted_count_matches(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv, n=5)
result = forget(kv, {'folderPath': '/home/user/proj', 'agentId': 'kiro'})
assert result['deleted'] == 5
class TestForgetPartial:
def test_partial_deletion(self, tmp_path):
kv = make_kv(tmp_path)
ids = add_obs(kv, n=4)
fp = 'home/user/proj'
to_delete = ids[:2]
result = forget(kv, {
'folderPath': '/home/user/proj',
'agentId': 'kiro',
'observationIds': to_delete,
})
assert result['deleted'] == 2
remaining = kv.list(KV.folder_obs(fp, 'kiro'))
remaining_ids = {o['id'] for o in remaining}
for oid in to_delete:
assert oid not in remaining_ids
def test_partial_decrements_obs_count(self, tmp_path):
kv = make_kv(tmp_path)
ids = add_obs(kv, n=4)
fp = 'home/user/proj'
forget(kv, {
'folderPath': '/home/user/proj',
'agentId': 'kiro',
'observationIds': ids[:2],
})
meta = kv.get(KV.folder_meta(fp, 'kiro'), 'meta')
assert meta['obsCount'] == 2
class TestForgetMemory:
def test_delete_global_memory(self, tmp_path):
kv = make_kv(tmp_path)
from functions import remember
result = remember(kv, {'content': 'Important insight', 'type': 'fact'})
mem_id = result['memory']['id']
forget_result = forget(kv, {'memoryId': mem_id})
assert forget_result['deleted'] >= 1
stored = kv.get(KV.memories, mem_id)
assert stored is None