import pytest from pyra.security.boundaries import VaultAccessError def test_list_memories_empty(tmp_pyra_home): from pyra.memory.reader import list_memories memories = list_memories() assert isinstance(memories, list) def test_write_and_read_memory(tmp_pyra_home): from pyra.memory.writer import write_memory from pyra.memory.reader import read_memory write_memory("user/test_note.md", "# Test\n\nHello world") content = read_memory("user/test_note.md") assert "Hello world" in content def test_read_nonexistent_raises(tmp_pyra_home): from pyra.memory.reader import read_memory with pytest.raises(FileNotFoundError): read_memory("does_not_exist.md") def test_read_vault_path_blocked(tmp_pyra_home): from pyra.memory.reader import read_memory with pytest.raises((VaultAccessError, PermissionError, FileNotFoundError)): read_memory("../../../../vault/secrets/api_keys.json") def test_list_memories_after_writes(tmp_pyra_home): from pyra.memory.writer import write_memory from pyra.memory.reader import list_memories write_memory("user/profile.md", "# Profile") write_memory("context/project.md", "# Project") memories = list_memories() names = [m.name for m in memories] assert any("profile" in n for n in names) assert any("project" in n for n in names) def test_load_context_returns_string(tmp_pyra_home): from pyra.memory.writer import write_memory from pyra.memory.reader import load_context_for_session write_memory("user/profile.md", "# Profile\n\nI am a developer.") ctx = load_context_for_session() assert isinstance(ctx, str) assert "developer" in ctx