test_memory_service_api.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from pathlib import Path
  2. from tests.conftest import (
  3. build_fastapi_test_client,
  4. build_postgres_database_url,
  5. build_postgres_engine,
  6. prepare_known_service_import,
  7. )
  8. def test_memory_service_post_contract_matches_frontend(
  9. tmp_path: Path,
  10. monkeypatch,
  11. ) -> None:
  12. prepare_known_service_import("memory-service")
  13. from app.bootstrap.app import create_app
  14. from app.db.models import Base
  15. from core_db import create_session_factory
  16. database_url = build_postgres_database_url(tmp_path, "memory-api")
  17. monkeypatch.setenv("AGENT_PLATFORM_DATABASE_URL", database_url)
  18. monkeypatch.setenv("AGENT_PLATFORM_REDIS_URL", "")
  19. engine = build_postgres_engine(database_url)
  20. Base.metadata.create_all(engine)
  21. app = create_app()
  22. app.state.session_factory = create_session_factory(engine)
  23. client = build_fastapi_test_client(app)
  24. create_response = client.post(
  25. "/memories/create",
  26. json={
  27. "scopeType": "user",
  28. "scopeId": "user-demo",
  29. "memoryType": "preference",
  30. "contentText": "用户喜欢先看结论,再看细节。",
  31. "metadata": {"source": "test"},
  32. "importanceScore": 80,
  33. },
  34. )
  35. assert create_response.status_code == 200
  36. memory = create_response.json()["data"]
  37. assert memory["scopeType"] == "user"
  38. assert memory["contentText"] == "用户喜欢先看结论,再看细节。"
  39. assert memory["createdTime"]
  40. assert "scope_type" not in memory
  41. list_response = client.post(
  42. "/memories/list",
  43. json={"page": 1, "pageSize": 20, "scopeType": "user", "keyword": "结论"},
  44. )
  45. assert list_response.status_code == 200
  46. list_payload = list_response.json()["data"]
  47. assert list_payload["total"] == 1
  48. assert list_payload["items"][0]["id"] == memory["id"]
  49. search_response = client.post(
  50. "/memories/search/query",
  51. json={"query": "用户偏好", "scopeType": "user", "scopeId": "user-demo", "limit": 5},
  52. )
  53. assert search_response.status_code == 200
  54. search_payload = search_response.json()["data"]
  55. assert search_payload
  56. assert "scoreDetails" in search_payload[0]
  57. assert "score_json" not in search_payload[0]
  58. detail_response = client.post("/memories/detail", json={"memoryId": memory["id"]})
  59. assert detail_response.status_code == 200
  60. assert detail_response.json()["data"]["lastAccessedTime"] is not None
  61. update_response = client.post(
  62. "/memories/update",
  63. json={
  64. "memoryId": memory["id"],
  65. "contentText": "用户喜欢先看结论,然后再展开执行细节。",
  66. "importanceScore": 90,
  67. },
  68. )
  69. assert update_response.status_code == 200
  70. assert update_response.json()["data"]["importanceScore"] == 90
  71. status_response = client.post(
  72. "/memories/status",
  73. json={"memoryId": memory["id"], "status": "archived"},
  74. )
  75. assert status_response.status_code == 200
  76. assert status_response.json()["data"]["status"] == "archived"
  77. delete_response = client.post("/memories/delete", json={"memoryId": memory["id"]})
  78. assert delete_response.status_code == 200
  79. assert delete_response.json()["data"] == {"deleted": True, "memoryId": memory["id"]}