| | import pytest
|
| | from fastapi.testclient import TestClient
|
| | from unittest.mock import MagicMock, patch, AsyncMock
|
| | import sys
|
| | import os
|
| |
|
| |
|
| | mock_engine_cls = MagicMock()
|
| | mock_engine_instance = MagicMock()
|
| | mock_engine_instance.get_stats = AsyncMock(return_value={"engine_version": "3.5.1", "tiers": {"hot_count": 10}})
|
| | mock_engine_instance.get_memory = AsyncMock(return_value=None)
|
| | mock_engine_instance.delete_memory = AsyncMock(return_value=True)
|
| | mock_engine_instance.initialize = AsyncMock(return_value=None)
|
| | mock_engine_instance.close = AsyncMock(return_value=None)
|
| | mock_engine_cls.return_value = mock_engine_instance
|
| |
|
| |
|
| | mock_container = MagicMock()
|
| | mock_container.redis_storage = AsyncMock()
|
| | mock_container.redis_storage.check_health = AsyncMock(return_value=True)
|
| | mock_container.qdrant_store = MagicMock()
|
| |
|
| |
|
| | patcher1 = patch("mnemocore.api.main.HAIMEngine", mock_engine_cls)
|
| | patcher2 = patch("mnemocore.api.main.build_container", return_value=mock_container)
|
| | patcher1.start()
|
| | patcher2.start()
|
| |
|
| | from mnemocore.api.main import app, get_api_key
|
| |
|
| | client = TestClient(app)
|
| |
|
| |
|
| | API_KEY = "test-key"
|
| |
|
| | @pytest.fixture(autouse=True)
|
| | def setup_mocks(monkeypatch):
|
| | from mnemocore.core.config import get_config, reset_config
|
| | reset_config()
|
| | monkeypatch.setenv("HAIM_API_KEY", API_KEY)
|
| |
|
| |
|
| | app.state.engine = mock_engine_instance
|
| | app.state.container = mock_container
|
| | yield
|
| | reset_config()
|
| |
|
| | def test_root():
|
| | response = client.get("/")
|
| | assert response.status_code == 200
|
| | assert "version" in response.json()
|
| |
|
| | def test_health():
|
| | response = client.get("/health")
|
| | assert response.status_code == 200
|
| | assert response.json()["status"] == "healthy"
|
| | assert response.json()["engine_ready"] is True
|
| |
|
| | def test_stats():
|
| | mock_engine_instance.get_stats.return_value = {
|
| | "engine_version": "3.5.1",
|
| | "tiers": {"hot_count": 10}
|
| | }
|
| |
|
| | response = client.get("/stats", headers={"X-API-Key": API_KEY})
|
| | assert response.status_code == 200
|
| | assert response.json()["tiers"]["hot_count"] == 10
|
| |
|
| | def test_delete_memory_found():
|
| | mock_memory = MagicMock()
|
| | mock_engine_instance.get_memory.return_value = mock_memory
|
| |
|
| | response = client.delete("/memory/mem_123", headers={"X-API-Key": API_KEY})
|
| | assert response.status_code == 200
|
| | assert response.json()["ok"] is True
|
| | mock_engine_instance.delete_memory.assert_called_with("mem_123")
|
| |
|
| | def test_delete_memory_not_found():
|
| | mock_engine_instance.get_memory.return_value = None
|
| |
|
| | response = client.delete("/memory/mem_missing", headers={"X-API-Key": API_KEY})
|
| | assert response.status_code == 404
|
| |
|
| | json_resp = response.json()
|
| | error_text = json_resp.get("error", json_resp.get("detail", json_resp.get("message", ""))).lower()
|
| | assert "not found" in error_text or "memory" in error_text or "mem_missing" in error_text
|
| |
|