scrapeRL / backend /tests /test_api /test_memory.py
NeerajCodz's picture
test: add comprehensive API and core module tests
e8d7c11
"""Tests for memory API routes."""
import pytest
from fastapi.testclient import TestClient
class TestMemoryAPI:
"""Test memory API endpoints."""
def test_store_memory_entry(self, client: TestClient) -> None:
"""Test POST /api/memory/store creates new memory entry."""
payload = {
"memory_type": "short_term",
"content": {
"observation": "User clicked login button",
"action": "click",
},
"metadata": {"url": "https://example.com"},
"episode_id": "ep_001",
"agent_id": "agent_test",
}
response = client.post("/api/memory/store", json=payload)
assert response.status_code == 201
data = response.json()
assert "id" in data
assert data["memory_type"] == "short_term"
assert data["content"] == payload["content"]
assert data["episode_id"] == "ep_001"
assert "timestamp" in data
def test_store_memory_all_types(self, client: TestClient) -> None:
"""Test storing memory with all valid types."""
valid_types = ["short_term", "working", "long_term", "shared"]
for memory_type in valid_types:
payload = {
"memory_type": memory_type,
"content": {"test": f"data for {memory_type}"},
}
response = client.post("/api/memory/store", json=payload)
assert response.status_code == 201
data = response.json()
assert data["memory_type"] == memory_type
def test_store_memory_invalid_type(self, client: TestClient) -> None:
"""Test storing memory with invalid type."""
payload = {"memory_type": "invalid_type", "content": {"test": "data"}}
response = client.post("/api/memory/store", json=payload)
assert response.status_code == 422
def test_get_memory_entry(self, client: TestClient) -> None:
"""Test GET /api/memory/{entry_id}."""
# Store first
payload = {
"memory_type": "long_term",
"content": {"knowledge": "test data"},
}
store_response = client.post("/api/memory/store", json=payload)
assert store_response.status_code == 201
entry_id = store_response.json()["id"]
# Retrieve
response = client.get(f"/api/memory/{entry_id}")
assert response.status_code == 200
data = response.json()
assert data["id"] == entry_id
assert data["memory_type"] == "long_term"
def test_get_nonexistent_memory(self, client: TestClient) -> None:
"""Test GET /api/memory/{entry_id} for non-existent."""
response = client.get("/api/memory/nonexistent-id-12345")
assert response.status_code == 404
def test_delete_memory_entry(self, client: TestClient) -> None:
"""Test DELETE /api/memory/{entry_id}."""
# Store first
payload = {
"memory_type": "short_term",
"content": {"temporary": "data"},
}
store_response = client.post("/api/memory/store", json=payload)
assert store_response.status_code == 201
entry_id = store_response.json()["id"]
# Delete
response = client.delete(f"/api/memory/{entry_id}")
assert response.status_code == 204
# Verify deleted
get_response = client.get(f"/api/memory/{entry_id}")
assert get_response.status_code == 404
def test_query_memory(self, client: TestClient) -> None:
"""Test POST /api/memory/query."""
# Store some entries first
for i in range(3):
payload = {
"memory_type": "short_term",
"content": {"index": i, "data": f"test_{i}"},
}
client.post("/api/memory/store", json=payload)
# Query
query_payload = {"query": "test", "limit": 10}
response = client.post("/api/memory/query", json=query_payload)
assert response.status_code == 200
data = response.json()
assert "entries" in data
assert "total_found" in data
def test_get_memory_stats(self, client: TestClient) -> None:
"""Test GET /api/memory/stats/overview."""
response = client.get("/api/memory/stats/overview")
assert response.status_code == 200
data = response.json()
assert "short_term_count" in data
assert "working_count" in data
assert "long_term_count" in data
assert "shared_count" in data
assert "total_count" in data
def test_clear_memory_layer(self, client: TestClient) -> None:
"""Test DELETE /api/memory/clear/{memory_type}."""
# Store entries
payload = {
"memory_type": "short_term",
"content": {"test": "data"},
}
client.post("/api/memory/store", json=payload)
# Clear
response = client.delete("/api/memory/clear/short_term")
assert response.status_code == 204
def test_consolidate_memory(self, client: TestClient) -> None:
"""Test POST /api/memory/consolidate."""
# Store short-term entries
for i in range(3):
payload = {
"memory_type": "short_term",
"content": {"index": i},
}
client.post("/api/memory/store", json=payload)
# Consolidate
response = client.post("/api/memory/consolidate")
assert response.status_code == 200
data = response.json()
assert "consolidated_count" in data