Files
odysseus/tests/test_manage_memory_json_contract.py
T

68 lines
2.2 KiB
Python

import json
from src.ai_interaction import _manage_memory_lines
from src.tool_schemas import function_call_to_tool_block
def lines(**payload):
return _manage_memory_lines(json.dumps(payload))
def test_add_preserves_public_schema_category():
assert lines(action="add", text="I prefer quiet rooms", category="preference") == [
"add", "I prefer quiet rooms", "preference",
]
def test_edit_keeps_identifier_separate_from_replacement_text():
assert lines(action="edit", memory_id="abc123", text="I prefer daylight") == [
"edit", "abc123", "I prefer daylight",
]
def test_list_uses_category_and_search_uses_text():
assert lines(action="list", category="event") == ["list", "event"]
assert lines(action="search", text="daylight") == ["search", "daylight"]
def test_command_form_remains_supported_without_structured_action():
assert lines(command="add\nI use metric units\npreference") == [
"add", "I use metric units", "preference",
]
def test_command_payload_is_supported_alongside_structured_action():
assert lines(action="search", command="project Aurora") == [
"search", "project Aurora",
]
assert lines(action="delete", command="abc123") == ["delete", "abc123"]
assert lines(action="edit", command="abc123\nI prefer daylight") == [
"edit", "abc123", "I prefer daylight",
]
assert lines(action="add", command="I use metric units\npreference") == [
"add", "I use metric units", "preference",
]
def test_list_does_not_treat_command_as_mutation_payload():
assert lines(action="list", command="delete\nall") == ["list", ""]
def test_function_converter_keeps_action_when_command_is_only_payload():
block = function_call_to_tool_block(
"manage_memory",
json.dumps({"action": "search", "command": "project Aurora"}),
)
assert block is not None
assert block.tool_type == "manage_memory"
assert block.content == "search\nproject Aurora"
def test_function_converter_does_not_duplicate_complete_command_action():
block = function_call_to_tool_block(
"manage_memory",
json.dumps({"action": "search", "command": "search\nproject Aurora"}),
)
assert block is not None
assert block.content == "search\nproject Aurora"