@@ -364,3 +364,106 @@ def test_from_inner_object_with_extra(self):
364364 assert (
365365 memory_collection .memory_collection_name == "test-memory-collection"
366366 )
367+
368+
369+ class TestMemoryCollectionToMem0Memory :
370+ """测试 MemoryCollection.to_mem0_memory 和 to_mem0_memory_async 方法"""
371+
372+ @patch ("agentrun.memory_collection.client.MemoryCollectionControlAPI" )
373+ def test_to_mem0_memory_sync (self , mock_control_api_class ):
374+ """测试同步转换为 mem0 Memory 客户端"""
375+ # Mock MemoryCollection 数据
376+ mock_control_api = MagicMock ()
377+ mock_data = MockMemoryCollectionData ()
378+ mock_control_api .get_memory_collection .return_value = mock_data
379+ mock_control_api_class .return_value = mock_control_api
380+
381+ # Mock Memory.from_config
382+ with patch ("agentrun_mem0.Memory" ) as mock_memory_class :
383+ mock_memory_instance = MagicMock ()
384+ mock_memory_class .from_config .return_value = mock_memory_instance
385+
386+ # 调用 to_mem0_memory
387+ result = MemoryCollection .to_mem0_memory (
388+ "test-memory-collection" ,
389+ config = Config (
390+ access_key_id = "test-key" ,
391+ access_key_secret = "test-secret" ,
392+ region_id = "cn-hangzhou" ,
393+ ),
394+ )
395+
396+ # 验证返回的是 Memory 实例
397+ assert result == mock_memory_instance
398+ mock_memory_class .from_config .assert_called_once ()
399+
400+ @patch ("agentrun.memory_collection.client.MemoryCollectionControlAPI" )
401+ @pytest .mark .asyncio
402+ async def test_to_mem0_memory_async (self , mock_control_api_class ):
403+ """测试异步转换为 mem0 AsyncMemory 客户端"""
404+ # Mock MemoryCollection 数据
405+ mock_control_api = MagicMock ()
406+ mock_data = MockMemoryCollectionData ()
407+ mock_control_api .get_memory_collection_async = AsyncMock (
408+ return_value = mock_data
409+ )
410+ mock_control_api_class .return_value = mock_control_api
411+
412+ # Mock AsyncMemory.from_config
413+ with patch ("agentrun_mem0.AsyncMemory" ) as mock_async_memory_class :
414+ mock_async_memory_instance = MagicMock ()
415+ # from_config 是异步方法,需要返回 AsyncMock
416+ mock_async_memory_class .from_config = AsyncMock (
417+ return_value = mock_async_memory_instance
418+ )
419+
420+ # 调用 to_mem0_memory_async
421+ result = await MemoryCollection .to_mem0_memory_async (
422+ "test-memory-collection" ,
423+ config = Config (
424+ access_key_id = "test-key" ,
425+ access_key_secret = "test-secret" ,
426+ region_id = "cn-hangzhou" ,
427+ ),
428+ )
429+
430+ # 验证返回的是 AsyncMemory 实例
431+ assert result == mock_async_memory_instance
432+ mock_async_memory_class .from_config .assert_called_once ()
433+
434+ @patch ("agentrun.memory_collection.client.MemoryCollectionControlAPI" )
435+ def test_to_mem0_memory_import_error (self , mock_control_api_class ):
436+ """测试 mem0 包未安装时的错误处理"""
437+ mock_control_api = MagicMock ()
438+ mock_control_api .get_memory_collection .return_value = (
439+ MockMemoryCollectionData ()
440+ )
441+ mock_control_api_class .return_value = mock_control_api
442+
443+ # Mock import 失败
444+ with patch ("builtins.__import__" , side_effect = ImportError ("No module" )):
445+ with pytest .raises (ImportError ) as exc_info :
446+ MemoryCollection .to_mem0_memory ("test-memory-collection" )
447+
448+ assert "agentrun-mem0ai package is required" in str (exc_info .value )
449+
450+ @patch ("agentrun.memory_collection.client.MemoryCollectionControlAPI" )
451+ @pytest .mark .asyncio
452+ async def test_to_mem0_memory_async_import_error (
453+ self , mock_control_api_class
454+ ):
455+ """测试异步方法 mem0 包未安装时的错误处理"""
456+ mock_control_api = MagicMock ()
457+ mock_control_api .get_memory_collection_async = AsyncMock (
458+ return_value = MockMemoryCollectionData ()
459+ )
460+ mock_control_api_class .return_value = mock_control_api
461+
462+ # Mock import 失败
463+ with patch ("builtins.__import__" , side_effect = ImportError ("No module" )):
464+ with pytest .raises (ImportError ) as exc_info :
465+ await MemoryCollection .to_mem0_memory_async (
466+ "test-memory-collection"
467+ )
468+
469+ assert "agentrun-mem0ai package is required" in str (exc_info .value )
0 commit comments