Skip to content

Commit 81aec05

Browse files
2 parents 11d9f85 + 4cdb383 commit 81aec05

File tree

5 files changed

+290
-85
lines changed

5 files changed

+290
-85
lines changed
Lines changed: 1 addition & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
# pylint: disable=import-error, wrong-import-position, missing-module-docstring
2-
import json
32
import os
43
import sys
5-
from unittest.mock import AsyncMock, MagicMock, patch
4+
from unittest.mock import MagicMock
65
import pytest
76
from pydantic import ValidationError
87

9-
108
# Environment and module setup
119
sys.modules["azure.monitor.events.extension"] = MagicMock()
1210

@@ -18,84 +16,10 @@
1816
os.environ["AZURE_OPENAI_API_VERSION"] = "2023-01-01"
1917
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://mock-openai-endpoint"
2018

21-
# noqa: F401 is to ignore unused import warnings (if any)
2219
from src.backend.agents.agentutils import extract_and_update_transition_states # noqa: F401, C0413
2320
from src.backend.models.messages import Step # noqa: F401, C0413
2421

2522

26-
@pytest.mark.asyncio
27-
async def test_extract_and_update_transition_states_invalid_response():
28-
"""Test handling of invalid JSON response from model client."""
29-
session_id = "test_session"
30-
user_id = "test_user"
31-
step = Step(
32-
data_type="step",
33-
plan_id="test_plan",
34-
action="test_action",
35-
agent="HumanAgent",
36-
session_id=session_id,
37-
user_id=user_id,
38-
agent_reply="test_reply",
39-
)
40-
model_client = AsyncMock()
41-
cosmos_mock = MagicMock()
42-
43-
model_client.create.return_value = MagicMock(content="invalid_json")
44-
45-
with patch(
46-
"src.backend.context.cosmos_memory.CosmosBufferedChatCompletionContext",
47-
cosmos_mock,
48-
):
49-
with pytest.raises(json.JSONDecodeError):
50-
await extract_and_update_transition_states(
51-
step=step,
52-
session_id=session_id,
53-
user_id=user_id,
54-
planner_dynamic_or_workflow="workflow",
55-
model_client=model_client,
56-
)
57-
58-
cosmos_mock.update_step.assert_not_called()
59-
60-
61-
@pytest.mark.asyncio
62-
async def test_extract_and_update_transition_states_validation_error():
63-
"""Test handling of a response missing required fields."""
64-
session_id = "test_session"
65-
user_id = "test_user"
66-
step = Step(
67-
data_type="step",
68-
plan_id="test_plan",
69-
action="test_action",
70-
agent="HumanAgent",
71-
session_id=session_id,
72-
user_id=user_id,
73-
agent_reply="test_reply",
74-
)
75-
model_client = AsyncMock()
76-
cosmos_mock = MagicMock()
77-
78-
invalid_response = {
79-
"identifiedTargetState": "state1"
80-
} # Missing 'identifiedTargetTransition'
81-
model_client.create.return_value = MagicMock(content=json.dumps(invalid_response))
82-
83-
with patch(
84-
"src.backend.context.cosmos_memory.CosmosBufferedChatCompletionContext",
85-
cosmos_mock,
86-
):
87-
with pytest.raises(ValidationError):
88-
await extract_and_update_transition_states(
89-
step=step,
90-
session_id=session_id,
91-
user_id=user_id,
92-
planner_dynamic_or_workflow="workflow",
93-
model_client=model_client,
94-
)
95-
96-
cosmos_mock.update_step.assert_not_called()
97-
98-
9923
def test_step_initialization():
10024
"""Test Step initialization with valid data."""
10125
step = Step(
@@ -128,4 +52,3 @@ def test_step_missing_required_fields():
12852
agent="test_agent",
12953
session_id="test_session",
13054
)
131-

src/backend/tests/agents/test_base_agent.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from src.backend.models.messages import ActionRequest, Step, StepStatus
2323
from autogen_core.base import AgentId
2424

25+
2526
# Context manager for setting up mocks
2627
@contextmanager
2728
def mock_context():

src/backend/tests/agents/test_group_chat_manager.py

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
"""
2+
Combined Test cases for GroupChatManager class in the backend agents module.
3+
"""
4+
15
import os
26
import sys
37
from unittest.mock import AsyncMock, patch, MagicMock
48
import pytest
59

6-
710
# Set mock environment variables for Azure and CosmosDB before importing anything else
811
os.environ["COSMOSDB_ENDPOINT"] = "https://mock-endpoint"
912
os.environ["COSMOSDB_KEY"] = "mock-key"
@@ -13,21 +16,17 @@
1316
os.environ["AZURE_OPENAI_API_VERSION"] = "2023-01-01"
1417
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://mock-openai-endpoint"
1518

16-
1719
# Mock Azure dependencies
1820
sys.modules["azure.monitor.events.extension"] = MagicMock()
1921

20-
2122
# Import after setting environment variables
2223
from src.backend.agents.group_chat_manager import GroupChatManager
2324
from src.backend.models.messages import (
24-
HumanFeedback,
2525
Step,
2626
StepStatus,
2727
BAgentType,
28-
Plan,
2928
)
30-
from autogen_core.base import MessageContext, AgentInstantiationContext, AgentRuntime
29+
from autogen_core.base import AgentInstantiationContext, AgentRuntime
3130
from autogen_core.components.models import AzureOpenAIChatCompletionClient
3231
from src.backend.context.cosmos_memory import CosmosBufferedChatCompletionContext
3332
from autogen_core.base import AgentId
@@ -98,4 +97,32 @@ async def test_update_step_status(mock_track_event, setup_group_chat_manager):
9897
"human_feedback": "Feedback message",
9998
"source": step.agent,
10099
},
101-
)
100+
)
101+
102+
103+
@pytest.mark.asyncio
104+
async def test_update_step_invalid_feedback_status(setup_group_chat_manager):
105+
"""
106+
Test `_update_step_status` with invalid feedback status.
107+
Covers lines 210-211.
108+
"""
109+
group_chat_manager, mock_memory, session_id, user_id, mock_agent_ids = setup_group_chat_manager
110+
111+
# Create a mock Step
112+
step = Step(
113+
id="test_step_id",
114+
session_id=session_id,
115+
plan_id="test_plan_id",
116+
user_id=user_id,
117+
action="Test Action",
118+
agent=BAgentType.human_agent,
119+
status=StepStatus.planned,
120+
)
121+
122+
# Call the method with invalid feedback status
123+
await group_chat_manager._update_step_status(step, None, "Feedback message")
124+
125+
# Assertions
126+
step.status = StepStatus.planned # Status should remain unchanged
127+
step.human_feedback = "Feedback message"
128+
mock_memory.update_step.assert_called_once_with(step)

0 commit comments

Comments
 (0)