agentcache / tests /test_timeline.py
Yash030's picture
feat: migrate agentmemory to agentcache namespace, endpoints, and tools
12a6c9a
Raw
History Blame Contribute Delete
3.24 kB
"""Unit tests for folder_timeline (REQ-020, REQ-021, REQ-022, REQ-071)."""
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, folder_timeline
def make_kv(tmp_path):
db_path = os.path.join(str(tmp_path), 'test.db')
return StateKV(db_path=db_path)
def ts(offset_seconds=0):
dt = datetime.datetime(2025, 1, 15, 10, 0, 0) + datetime.timedelta(seconds=offset_seconds)
return dt.isoformat() + 'Z'
def add_obs(kv, folder='/home/user/proj', agent='kiro', timestamp=None, text='obs'):
return folder_observe(kv, {
'folderPath': folder,
'agentId': agent,
'text': text,
'timestamp': timestamp or ts(),
})
class TestTimelineOrdering:
def test_results_sorted_desc(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv, timestamp=ts(0))
add_obs(kv, timestamp=ts(60))
add_obs(kv, timestamp=ts(30))
results = folder_timeline(kv)
timestamps = [r['timestamp'] for r in results]
assert timestamps == sorted(timestamps, reverse=True)
def test_empty_returns_empty(self, tmp_path):
kv = make_kv(tmp_path)
results = folder_timeline(kv)
assert results == []
class TestTimelineLimit:
def test_limit_respected(self, tmp_path):
kv = make_kv(tmp_path)
for i in range(10):
add_obs(kv, timestamp=ts(i), text=f"obs {i}")
results = folder_timeline(kv, limit=5)
assert len(results) == 5
def test_default_limit_100(self, tmp_path):
kv = make_kv(tmp_path)
for i in range(150):
add_obs(kv, timestamp=ts(i), text=f"obs {i}")
results = folder_timeline(kv)
assert len(results) == 100
class TestTimelineFilters:
def test_folder_filter(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv, folder='/home/user/proj-a', timestamp=ts(0))
add_obs(kv, folder='/home/user/proj-b', timestamp=ts(1))
results = folder_timeline(kv, folder_path='home/user/proj-a')
assert all(r['folderPath'] == 'home/user/proj-a' for r in results)
assert len(results) == 1
def test_agent_filter(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv, agent='kiro', timestamp=ts(0))
add_obs(kv, agent='claude', timestamp=ts(1))
results = folder_timeline(kv, agent_id='kiro')
assert all(r['agentId'] == 'kiro' for r in results)
def test_before_filter(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv, timestamp=ts(0)) # 10:00:00
add_obs(kv, timestamp=ts(60)) # 10:01:00
add_obs(kv, timestamp=ts(120)) # 10:02:00
results = folder_timeline(kv, before=ts(90))
# Should only include obs before 10:01:30
for r in results:
assert r['timestamp'] < ts(90)
def test_after_filter(self, tmp_path):
kv = make_kv(tmp_path)
add_obs(kv, timestamp=ts(0))
add_obs(kv, timestamp=ts(60))
add_obs(kv, timestamp=ts(120))
results = folder_timeline(kv, after=ts(30))
for r in results:
assert r['timestamp'] > ts(30)