@@ -446,9 +446,42 @@ def test_claude_environment_variables(
446446 env_used = mock_run .call_args [1 ]["env" ]
447447 assert env_used ["ANTHROPIC_BASE_URL" ] == "https://api.example.com"
448448 assert env_used ["ANTHROPIC_AUTH_TOKEN" ] == "key123"
449+ assert env_used ["CLAUDE_CODE_OAUTH_TOKEN" ] == "key123"
449450 assert env_used ["ANTHROPIC_MODEL" ] == "claude-3"
450451 assert env_used ["NODE_TLS_REJECT_UNAUTHORIZED" ] == "0"
451452
453+ @patch ("code_assistant_manager.tools.subprocess.run" )
454+ @patch ("code_assistant_manager.tools.select_two_models" )
455+ @patch .object (ClaudeTool , "_ensure_tool_installed" , return_value = True )
456+ @patch ("code_assistant_manager.tools.EndpointManager" )
457+ @patch .dict (
458+ os .environ ,
459+ {
460+ "CODE_ASSISTANT_MANAGER_NONINTERACTIVE" : "1" ,
461+ "CLAUDE_CODE_OAUTH_TOKEN" : "oauth-token-from-env" ,
462+ },
463+ )
464+ def test_claude_environment_prefers_existing_oauth_token (
465+ self , mock_em_class , mock_install , mock_select , mock_run , config_manager
466+ ):
467+ """Test Claude uses an existing OAuth token from the environment."""
468+ mock_em = MagicMock ()
469+ mock_em_class .return_value = mock_em
470+
471+ mock_em .select_endpoint .return_value = (True , "endpoint1" )
472+ mock_em .get_endpoint_config .return_value = (
473+ True ,
474+ {"endpoint" : "https://api.example.com" , "actual_api_key" : "key123" },
475+ )
476+ mock_em .fetch_models .return_value = (True , ["claude-3" ])
477+ mock_select .return_value = (True , ("claude-3" , "claude-2" ))
478+
479+ tool = ClaudeTool (config_manager )
480+ tool .run ([])
481+
482+ env_used = mock_run .call_args [1 ]["env" ]
483+ assert env_used ["CLAUDE_CODE_OAUTH_TOKEN" ] == "oauth-token-from-env"
484+
452485
453486class TestToolErrorHandling :
454487 """Test error handling in tools."""
0 commit comments