* feat(sdk): expose memory lifecycle status filters Co-authored-by: Cursor <cursoragent@cursor.com> * feat(sdk): persist idempotent write outcomes Co-authored-by: Cursor <cursoragent@cursor.com> * feat(sdk): add explicit exact raw APIs Co-authored-by: Cursor <cursoragent@cursor.com> * feat(sdk): snapshot quiesced local data plane Co-authored-by: Cursor <cursoragent@cursor.com> * feat(sdk): restore quiesced local data plane Co-authored-by: Cursor <cursoragent@cursor.com> * fix(sdk): report incomplete physical deletes Co-authored-by: Cursor <cursoragent@cursor.com> * docs(sdk): record authority migration contracts Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: alvinfei <alvinfei@tencent.com> Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from hy_memory.config import MemoryConfig
|
|
from hy_memory.data.cache_sqlite import SqliteCache
|
|
|
|
|
|
@pytest.fixture
|
|
async def cache(tmp_path):
|
|
config = MemoryConfig.from_dict(
|
|
{"cache": {"backend": "sqlite", "db_path": str(tmp_path / "cache.sqlite3")}}
|
|
)
|
|
value = SqliteCache(config)
|
|
await value.initialize()
|
|
yield value
|
|
await value.close()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_claim_is_atomic_and_returns_existing_scope(cache):
|
|
claimed = await cache.claim_write_outcome("r1", "u1", "a1", "s1", "add")
|
|
assert claimed is None
|
|
|
|
existing = await cache.claim_write_outcome("r1", "u1", "a1", "s1", "add")
|
|
assert existing["status"] == "running"
|
|
assert existing["user_id"] == "u1"
|
|
assert existing["operation"] == "add"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_terminal_result_round_trips(cache):
|
|
await cache.claim_write_outcome("r2", "u1", "a1", "s1", "add_extracted")
|
|
assert await cache.finish_write_outcome(
|
|
"r2",
|
|
"succeeded",
|
|
{"success": True, "memory_ids": ["m1", "m2"]},
|
|
)
|
|
|
|
outcome = await cache.get_write_outcome("r2")
|
|
assert outcome["status"] == "succeeded"
|
|
assert outcome["result"] == {"success": True, "memory_ids": ["m1", "m2"]}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_missing_outcome_is_distinct_from_running(cache):
|
|
assert await cache.get_write_outcome("missing") is None
|