"""测试 record_detail.""" import uuid import pytest from hermes_core.embedder import Embedder from hermes_core.recorder import record_detail pytestmark = pytest.mark.requires_embedder @pytest.fixture def embedder(): return Embedder() def _uid(): """生成唯一 user_id,确保测试隔离。""" return f"u_{uuid.uuid4().hex[:8]}" def test_record_first_entry(embedder): result = record_detail( user_id=_uid(), scope_desc="后端API开发", dimensions=[{"key": "language", "value": "TypeScript", "context": "默认语言"}], embedder=embedder, ) assert result["status"] == "recorded" assert result["dimension_count"] == 1 assert result["id"].startswith("rec_") def test_record_dimension_increment_enforced(embedder): """同 scope 内,维度数必须递增。""" uid = _uid() # 第一条: 2 维 result1 = record_detail( user_id=uid, scope_desc="后端开发", dimensions=[ {"key": "language", "value": "TypeScript", "context": ""}, {"key": "framework", "value": "Express", "context": ""}, ], embedder=embedder, ) assert result1["status"] == "recorded" # 第二条: 1 维 → 应拒绝 result2 = record_detail( user_id=uid, scope_desc="后端开发", dimensions=[{"key": "language", "value": "Python", "context": ""}], embedder=embedder, ) assert result2["status"] == "rejected" assert "dimension" in result2["reason"].lower() def test_record_same_conversation_relaxes_constraint(embedder): """同一次对话内维度约束松弛。""" uid = _uid() conv_id = "conv_test_123" result1 = record_detail( user_id=uid, scope_desc="后端开发", dimensions=[ {"key": "language", "value": "TypeScript", "context": ""}, {"key": "framework", "value": "Express", "context": ""}, ], conversation_id=conv_id, embedder=embedder, ) assert result1["status"] == "recorded" result2 = record_detail( user_id=uid, scope_desc="后端开发", dimensions=[{"key": "db", "value": "PostgreSQL", "context": ""}], conversation_id=conv_id, embedder=embedder, ) assert result2["status"] == "recorded" # 同对话,约束松弛 def test_record_upsert_increments_occurrences(embedder): """相同 scope+dimensions 应 upsert 并增加 occurrences。""" uid = _uid() dims = [{"key": "language", "value": "Go", "context": ""}] result1 = record_detail( user_id=uid, scope_desc="系统编程", dimensions=dims, embedder=embedder, ) rid = result1["id"] result2 = record_detail( user_id=uid, scope_desc="系统编程", dimensions=dims, embedder=embedder, ) # 同 dimensions 匹配到同一条记录,upsert assert result2["id"] == rid