11import pytest
22import os
33from unittest .mock import MagicMock , patch , AsyncMock
4- from src .backend .utils import retrieve_all_agent_tools
5-
6- # Mock all required environment variables globally before importing utils
7- with patch .dict (os .environ , {
8- "COSMOSDB_ENDPOINT" : "https://mock-cosmosdb.documents.azure.com:443/" ,
9- "COSMOSDB_KEY" : "mock_key" ,
10- "AZURE_OPENAI_ENDPOINT" : "https://mock-openai-endpoint.azure.com/" ,
11- "AZURE_OPENAI_API_VERSION" : "2024-05-01-preview" ,
12- "AZURE_OPENAI_DEPLOYMENT_NAME" : "mock-deployment" ,
13- "COSMOSDB_DATABASE" : "mock_database" ,
14- "COSMOSDB_CONTAINER" : "mock_container"
15- }):
16- from src .backend .utils import (
17- initialize_runtime_and_context ,
18- runtime_dict ,
19- rai_success , # Ensure rai_success is imported
20- )
21-
4+ from src .backend .utils import initialize_runtime_and_context , runtime_dict , rai_success
225from uuid import uuid4
23-
24-
6+
7+ # Mock environment variables
8+ os .environ ["COSMOSDB_ENDPOINT" ] = "https://mock-cosmosdb.documents.azure.com:443/"
9+ os .environ ["COSMOSDB_KEY" ] = "mock_key"
10+ os .environ ["AZURE_OPENAI_ENDPOINT" ] = "https://mock-openai-endpoint.azure.com/"
11+ os .environ ["AZURE_OPENAI_API_VERSION" ] = "2024-05-01-preview"
12+ os .environ ["AZURE_OPENAI_DEPLOYMENT_NAME" ] = "mock-deployment"
13+ os .environ ["COSMOSDB_DATABASE" ] = "mock_database"
14+ os .environ ["COSMOSDB_CONTAINER" ] = "mock_container"
15+
16+
2517@pytest .mark .asyncio
26- @patch ("utils.SingleThreadedAgentRuntime" )
27- @patch ("utils.CosmosBufferedChatCompletionContext" )
28- @patch ("utils.ToolAgent.register" )
18+ @patch ("src.backend. utils.SingleThreadedAgentRuntime" )
19+ @patch ("src.backend. utils.CosmosBufferedChatCompletionContext" )
20+ @patch ("src.backend. utils.ToolAgent.register" )
2921async def test_initialize_runtime_and_context_new_session (
30- mock_tool_agent_register , mock_context , mock_runtime
22+ _mock_tool_agent_register , _mock_context , _mock_runtime
3123):
32- session_id = None # Test session creation
24+ session_id = None
3325 user_id = "test-user-id"
34-
35- # Use AsyncMock for asynchronous methods
36- mock_runtime .return_value = AsyncMock ()
37- mock_context .return_value = AsyncMock ()
38-
39- runtime , context = await initialize_runtime_and_context (
40- session_id = session_id , user_id = user_id
41- )
42-
26+
27+ _mock_runtime .return_value = AsyncMock ()
28+ _mock_context .return_value = AsyncMock ()
29+
30+ runtime , context = await initialize_runtime_and_context (session_id , user_id )
31+
4332 assert runtime is not None
4433 assert context is not None
4534 assert len (runtime_dict ) > 0
46-
47-
35+
36+
4837@pytest .mark .asyncio
49- @patch ("utils.SingleThreadedAgentRuntime" )
50- @patch ("utils.CosmosBufferedChatCompletionContext" )
51- @patch ("utils.ToolAgent.register" )
38+ @patch ("src.backend. utils.SingleThreadedAgentRuntime" )
39+ @patch ("src.backend. utils.CosmosBufferedChatCompletionContext" )
40+ @patch ("src.backend. utils.ToolAgent.register" )
5241async def test_initialize_runtime_and_context_reuse_existing_session (
53- mock_tool_agent_register , mock_context , mock_runtime
42+ _mock_tool_agent_register , _mock_context , _mock_runtime
5443):
5544 session_id = str (uuid4 ())
5645 user_id = "test-user-id"
57-
58- # Mock existing runtime and context in global runtime_dict
46+
5947 mock_runtime_instance = AsyncMock ()
6048 mock_context_instance = AsyncMock ()
6149 runtime_dict [session_id ] = (mock_runtime_instance , mock_context_instance )
62-
63- runtime , context = await initialize_runtime_and_context (
64- session_id = session_id , user_id = user_id
65- )
66-
67- assert runtime is mock_runtime_instance
68- assert context is mock_context_instance
69-
70-
71- @pytest .mark .asyncio
72- async def test_initialize_runtime_and_context_user_id_none ():
73- # Assert ValueError is raised when user_id is None
74- with pytest .raises (ValueError , match = "The 'user_id' parameter cannot be None. Please provide a valid user ID." ):
75- await initialize_runtime_and_context (session_id = "test-session-id" , user_id = None )
76-
77-
78- @patch ("utils.requests.post" )
79- @patch ("utils.DefaultAzureCredential" )
50+
51+ runtime , context = await initialize_runtime_and_context (session_id , user_id )
52+
53+ assert runtime == mock_runtime_instance
54+ assert context == mock_context_instance
55+
56+
57+ @patch ("src.backend.utils.requests.post" )
58+ @patch ("src.backend.utils.DefaultAzureCredential" )
8059def test_rai_success_true (mock_credential , mock_post ):
81- # Mock Azure token
8260 mock_credential .return_value .get_token .return_value .token = "mock_token"
83-
84- # Mock API response
85- mock_post .return_value .json .return_value = {
86- "choices" : [{"message" : {"content" : "FALSE" }}]
87- }
88-
61+ mock_post .return_value .json .return_value = {"choices" : [{"message" : {"content" : "FALSE" }}]}
62+ mock_post .return_value .status_code = 200
63+
8964 result = rai_success ("This is a valid description." )
90- assert result is True
91-
92-
93- @patch ("utils.requests.post" )
94- @patch ("utils.DefaultAzureCredential" )
95- def test_rai_success_false (mock_credential , mock_post ):
96- # Mock Azure token
97- mock_credential .return_value .get_token .return_value .token = "mock_token"
98-
99- # Mock API response for content filter
100- mock_post .return_value .json .return_value = {
101- "error" : {"code" : "content_filter" }
102- }
103-
104- result = rai_success ("Invalid description with rule violation." )
105- assert result is False
106-
65+ assert result is True
0 commit comments