Stabilize core correctness and sync project plan state
This commit is contained in:
@@ -47,6 +47,23 @@ def test_create_memory_dedup(isolated_db):
|
||||
assert m1.id == m2.id
|
||||
|
||||
|
||||
def test_create_memory_dedup_is_project_scoped(isolated_db):
|
||||
from atocore.memory.service import create_memory
|
||||
m1 = create_memory("project", "Uses SQLite for local state", project="atocore")
|
||||
m2 = create_memory("project", "Uses SQLite for local state", project="openclaw")
|
||||
assert m1.id != m2.id
|
||||
|
||||
|
||||
def test_project_is_persisted_and_filterable(isolated_db):
|
||||
from atocore.memory.service import create_memory, get_memories
|
||||
create_memory("project", "Uses SQLite for local state", project="atocore")
|
||||
create_memory("project", "Uses Postgres in production", project="openclaw")
|
||||
|
||||
atocore_memories = get_memories(memory_type="project", project="atocore")
|
||||
assert len(atocore_memories) == 1
|
||||
assert atocore_memories[0].project == "atocore"
|
||||
|
||||
|
||||
def test_get_memories_all(isolated_db):
|
||||
from atocore.memory.service import create_memory, get_memories
|
||||
create_memory("identity", "User is an engineer")
|
||||
@@ -97,6 +114,25 @@ def test_update_memory(isolated_db):
|
||||
assert mems[0].confidence == 0.8
|
||||
|
||||
|
||||
def test_update_memory_rejects_duplicate_active_memory(isolated_db):
|
||||
from atocore.memory.service import create_memory, update_memory
|
||||
import pytest
|
||||
|
||||
first = create_memory("knowledge", "Canonical fact", project="atocore")
|
||||
second = create_memory("knowledge", "Different fact", project="atocore")
|
||||
|
||||
with pytest.raises(ValueError, match="duplicate active memory"):
|
||||
update_memory(second.id, content="Canonical fact")
|
||||
|
||||
|
||||
def test_create_memory_validates_confidence(isolated_db):
|
||||
from atocore.memory.service import create_memory
|
||||
import pytest
|
||||
|
||||
with pytest.raises(ValueError, match="Confidence must be between 0.0 and 1.0"):
|
||||
create_memory("knowledge", "Out of range", confidence=1.5)
|
||||
|
||||
|
||||
def test_invalidate_memory(isolated_db):
|
||||
from atocore.memory.service import create_memory, get_memories, invalidate_memory
|
||||
mem = create_memory("knowledge", "Wrong fact")
|
||||
@@ -126,6 +162,25 @@ def test_memories_for_context(isolated_db):
|
||||
assert chars > 0
|
||||
|
||||
|
||||
def test_memories_for_context_reserves_room_for_each_type(isolated_db):
|
||||
from atocore.memory.service import create_memory, get_memories_for_context
|
||||
create_memory("identity", "Identity entry that is intentionally long so it could consume the whole budget on its own")
|
||||
create_memory("preference", "Preference entry that should still appear")
|
||||
|
||||
text, _ = get_memories_for_context(memory_types=["identity", "preference"], budget=120)
|
||||
assert "[preference]" in text
|
||||
|
||||
|
||||
def test_memories_for_context_respects_actual_serialized_budget(isolated_db):
|
||||
from atocore.memory.service import create_memory, get_memories_for_context
|
||||
create_memory("identity", "Identity text that should fit the wrapper-aware memory budget calculation")
|
||||
create_memory("preference", "Preference text that should also fit")
|
||||
|
||||
text, chars = get_memories_for_context(memory_types=["identity", "preference"], budget=140)
|
||||
assert chars == len(text)
|
||||
assert chars <= 140
|
||||
|
||||
|
||||
def test_memories_for_context_empty(isolated_db):
|
||||
from atocore.memory.service import get_memories_for_context
|
||||
text, chars = get_memories_for_context()
|
||||
|
||||
Reference in New Issue
Block a user