@@ -342,15 +342,32 @@ def test_install_claude_mem_uses_plugin_system(self, mock_run):
342342 """install_claude_mem uses claude plugin marketplace and install."""
343343 from installer .steps .dependencies import install_claude_mem
344344
345- mock_run .return_value = MagicMock (returncode = 0 )
345+ mock_run .return_value = MagicMock (returncode = 0 , stdout = "" , stderr = "" )
346346
347347 result = install_claude_mem ()
348348
349349 assert mock_run .call_count >= 2
350- # Check marketplace add call
350+ # First call adds marketplace
351351 first_call = mock_run .call_args_list [0 ][0 ][0 ]
352352 assert "claude plugin marketplace add" in first_call [2 ]
353353 assert "thedotmack/claude-mem" in first_call [2 ]
354- # Check plugin install call
354+ # Second call installs plugin
355355 second_call = mock_run .call_args_list [1 ][0 ][0 ]
356356 assert "claude plugin install claude-mem" in second_call [2 ]
357+
358+ @patch ("subprocess.run" )
359+ def test_install_claude_mem_succeeds_if_marketplace_already_added (self , mock_run ):
360+ """install_claude_mem succeeds when marketplace already exists."""
361+ from installer .steps .dependencies import install_claude_mem
362+
363+ def side_effect (* args , ** kwargs ):
364+ cmd = args [0 ] if args else kwargs .get ("args" , [])
365+ if isinstance (cmd , list ) and "marketplace add" in cmd [2 ]:
366+ return MagicMock (returncode = 1 , stderr = "already installed" , stdout = "" )
367+ return MagicMock (returncode = 0 , stdout = "" , stderr = "" )
368+
369+ mock_run .side_effect = side_effect
370+
371+ result = install_claude_mem ()
372+
373+ assert result is True
0 commit comments