Skip to content

Commit 5cc1211

Browse files
committed
fix: updates for tests
Signed-off-by: Samantha Coyle <[email protected]>
1 parent 1eaec49 commit 5cc1211

File tree

5 files changed

+111
-142
lines changed

5 files changed

+111
-142
lines changed

tests/agents/agent/test_agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def test_agent_properties(self, basic_agent):
268268
@pytest.mark.asyncio
269269
async def test_agent_with_memory_context(self, basic_agent):
270270
"""Test agent using storage context when no input is provided."""
271-
basic_agent.storage.add_message(UserMessage(content="Previous message"))
271+
basic_agent.memory_store.add_message(UserMessage(content="Previous message"))
272272

273273
mock_response = Mock(spec=LLMChatResponse)
274274
assistant_msg = AssistantMessage(content="Response")

tests/agents/durableagent/test_durable_agent.py

Lines changed: 48 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,17 @@
1010
import pytest
1111
from dapr.ext.workflow import DaprWorkflowContext
1212

13-
from dapr_agents.agents.durableagent.agent import DurableAgent
14-
from dapr_agents.agents.durableagent.schemas import (
15-
AgentTaskResponse,
16-
BroadcastMessage,
13+
from dapr_agents import (
14+
DurableAgent
1715
)
18-
from dapr_agents.agents.storage import (
19-
Storage,
16+
from dapr_agents.agents.memory_store import (
2017
DurableAgentMessage,
21-
DurableAgentWorkflowEntry,
2218
DurableAgentWorkflowState,
19+
MemoryStore
20+
)
21+
from dapr_agents.agents.durableagent.schemas import (
22+
AgentTaskResponse,
23+
BroadcastMessage,
2324
)
2425
from dapr_agents.llm import OpenAIChatClient
2526
from dapr_agents.tool.base import AgentTool
@@ -28,7 +29,6 @@
2829
LLMChatCandidate,
2930
LLMChatResponse,
3031
ToolExecutionRecord,
31-
ToolMessage,
3232
)
3333

3434

@@ -66,17 +66,6 @@ def mock_agentic_post_init(self, __context: Any) -> None:
6666
self._client.get_state.return_value = (False, None)
6767
# Configure the mock for save_state method
6868
self._client.save_state.return_value = None
69-
self._agent_metadata = {
70-
"name": getattr(self, "name", "TestAgent"),
71-
"role": getattr(self, "role", "Test Role"),
72-
"goal": getattr(self, "goal", "Test Goal"),
73-
"instructions": getattr(self, "instructions", []),
74-
"topic_name": getattr(
75-
self, "agent_topic_name", getattr(self, "name", "TestAgent")
76-
),
77-
"pubsub_name": getattr(self, "message_bus_name", "testpubsub"),
78-
"orchestrator": False,
79-
}
8069
self._workflow_name = "AgenticWorkflow"
8170
self._is_running = False
8271
self._shutdown_event = asyncio.Event()
@@ -137,11 +126,10 @@ def setup_env(self, monkeypatch):
137126
mock_client = MockDaprClient()
138127
mock_client.get_state.return_value = Mock(data=None) # Default empty state
139128

140-
# Patch both the client import locations
129+
# Patch DaprClient factory to return our mock; MemoryStore will pick it up
141130
monkeypatch.setattr("dapr.clients.DaprClient", lambda: mock_client)
142-
monkeypatch.setattr(
143-
"dapr_agents.storage.daprstores.statestore.DaprClient", lambda: mock_client
144-
)
131+
from dapr_agents.agents.memory_store import MemoryStore as _MS
132+
monkeypatch.setattr(_MS, "_update_session_index", lambda self, instance_id: None)
145133

146134
yield
147135
if "OPENAI_API_KEY" in os.environ:
@@ -184,7 +172,7 @@ def mock_workflow_context(self):
184172
@pytest.fixture
185173
def basic_durable_agent(self, mock_llm):
186174
"""Create a basic durable agent instance for testing."""
187-
storage = Storage.model_construct(
175+
memory_store = MemoryStore(
188176
name="teststatestore", session_id="test_session"
189177
)
190178
return DurableAgent(
@@ -193,15 +181,15 @@ def basic_durable_agent(self, mock_llm):
193181
goal="Help with testing",
194182
instructions=["Be helpful", "Test things"],
195183
llm=mock_llm,
196-
storage=storage,
184+
memory_store=memory_store,
197185
max_iterations=5,
198186
message_bus_name="testpubsub",
199187
)
200188

201189
@pytest.fixture
202190
def durable_agent_with_tools(self, mock_llm, mock_tool):
203191
"""Create a durable agent with tools for testing."""
204-
storage = Storage.model_construct(
192+
memory_store = MemoryStore(
205193
name="teststatestore", session_id="test_session"
206194
)
207195
return DurableAgent(
@@ -210,22 +198,22 @@ def durable_agent_with_tools(self, mock_llm, mock_tool):
210198
goal="Execute tools",
211199
instructions=["Use tools when needed"],
212200
llm=mock_llm,
213-
storage=storage,
201+
memory_store=memory_store,
214202
tools=[mock_tool],
215203
max_iterations=5,
216204
message_bus_name="testpubsub",
217205
)
218206

219207
def test_durable_agent_initialization(self, mock_llm):
220208
"""Test durable agent initialization with basic parameters."""
221-
storage = Storage.model_construct(name="teststatestore")
209+
memory_store = MemoryStore(name="teststatestore")
222210
agent = DurableAgent(
223211
name="TestDurableAgent",
224212
role="Test Durable Assistant",
225213
goal="Help with testing",
226214
instructions=["Be helpful"],
227215
llm=mock_llm,
228-
storage=storage,
216+
memory_store=memory_store,
229217
message_bus_name="testpubsub",
230218
)
231219

@@ -243,13 +231,13 @@ def test_durable_agent_initialization(self, mock_llm):
243231

244232
def test_durable_agent_initialization_with_custom_topic(self, mock_llm):
245233
"""Test durable agent initialization with custom topic name."""
246-
storage = Storage.model_construct(name="teststatestore")
234+
memory_store = MemoryStore(name="teststatestore")
247235
agent = DurableAgent(
248236
name="TestDurableAgent",
249237
role="Test Durable Assistant",
250238
goal="Help with testing",
251239
llm=mock_llm,
252-
storage=storage,
240+
memory_store=memory_store,
253241
agent_topic_name="custom-topic",
254242
message_bus_name="testpubsub",
255243
)
@@ -258,30 +246,18 @@ def test_durable_agent_initialization_with_custom_topic(self, mock_llm):
258246

259247
def test_durable_agent_initialization_name_from_role(self, mock_llm):
260248
"""Test durable agent initialization with name derived from role."""
261-
storage = Storage.model_construct(name="teststatestore")
249+
memory_store = MemoryStore(name="teststatestore")
262250
agent = DurableAgent(
263251
role="Test Durable Assistant",
264252
goal="Help with testing",
265253
llm=mock_llm,
266-
storage=storage,
254+
memory_store=memory_store,
267255
message_bus_name="testpubsub",
268256
)
269257

270258
assert agent.name == "Test Durable Assistant"
271259
assert agent.agent_topic_name == "Test Durable Assistant"
272260

273-
def test_durable_agent_metadata(self, basic_durable_agent):
274-
"""Test durable agent metadata creation."""
275-
metadata = basic_durable_agent._agent_metadata
276-
277-
assert metadata is not None
278-
assert metadata["name"] == "TestDurableAgent"
279-
assert metadata["role"] == "Test Durable Assistant"
280-
assert metadata["goal"] == "Help with testing"
281-
assert metadata["topic_name"] == "TestDurableAgent"
282-
assert metadata["pubsub_name"] == "testpubsub"
283-
assert metadata["orchestrator"] is False
284-
285261
@pytest.fixture
286262
def mock_wf_client(self):
287263
client = Mock()
@@ -315,7 +291,7 @@ async def test_call_llm_activity(self, basic_durable_agent):
315291

316292
instance_id = "test-instance-123"
317293
# set up a minimal instance record
318-
basic_durable_agent.storage._current_state["instances"] = {
294+
basic_durable_agent.memory_store._current_state["instances"] = {
319295
instance_id: {
320296
"input": "Test task",
321297
"source": "test_source",
@@ -378,7 +354,7 @@ async def test_finish_workflow_activity(self, basic_durable_agent):
378354
"""Test finishing workflow activity."""
379355
instance_id = "test-instance-123"
380356
final_output = "Final response"
381-
basic_durable_agent.storage._current_state["instances"] = {
357+
basic_durable_agent.memory_store._current_state["instances"] = {
382358
instance_id: {
383359
"input": "Test task",
384360
"source": "test_source",
@@ -396,7 +372,7 @@ async def test_finish_workflow_activity(self, basic_durable_agent):
396372
basic_durable_agent.finalize_workflow(
397373
instance_id, final_output, "2024-01-01T00:00:00Z"
398374
)
399-
instance_data = basic_durable_agent.storage._current_state["instances"][
375+
instance_data = basic_durable_agent.memory_store._current_state["instances"][
400376
instance_id
401377
]
402378
assert instance_data["output"] == final_output
@@ -418,7 +394,7 @@ async def test_run_tool(self, basic_durable_agent, mock_tool):
418394
mock_run_tool.return_value = "tool_result"
419395

420396
# Set up instance state
421-
basic_durable_agent.storage._current_state["instances"] = {
397+
basic_durable_agent.memory_store._current_state["instances"] = {
422398
instance_id: {
423399
"input": "Test task",
424400
"source": "test_source",
@@ -448,7 +424,7 @@ async def test_run_tool(self, basic_durable_agent, mock_tool):
448424
assert result["execution_result"] == "tool_result"
449425

450426
# Verify state was updated atomically
451-
instance_data = basic_durable_agent.storage._current_state["instances"][
427+
instance_data = basic_durable_agent.memory_store._current_state["instances"][
452428
instance_id
453429
]
454430
assert len(instance_data["messages"]) == 1 # Tool message added
@@ -489,8 +465,8 @@ def test_record_initial_entry(self, basic_durable_agent):
489465
)
490466

491467
# Verify instance was created
492-
assert instance_id in basic_durable_agent.storage._current_state["instances"]
493-
instance_data = basic_durable_agent.storage._current_state["instances"][
468+
assert instance_id in basic_durable_agent.memory_store._current_state["instances"]
469+
instance_data = basic_durable_agent.memory_store._current_state["instances"][
494470
instance_id
495471
]
496472
assert instance_data["input"] == input_data
@@ -518,8 +494,8 @@ def test_ensure_instance_exists(self, basic_durable_agent):
518494
instance_id, "Test input", triggering_workflow_instance_id, test_time
519495
)
520496

521-
assert instance_id in basic_durable_agent.storage._current_state["instances"]
522-
instance_data = basic_durable_agent.storage._current_state["instances"][
497+
assert instance_id in basic_durable_agent.memory_store._current_state["instances"]
498+
instance_data = basic_durable_agent.memory_store._current_state["instances"][
523499
instance_id
524500
]
525501
assert (
@@ -532,7 +508,7 @@ def test_ensure_instance_exists(self, basic_durable_agent):
532508

533509
# Test that existing instance is not overwritten
534510
original_input = "Original input"
535-
basic_durable_agent.storage._current_state["instances"][instance_id][
511+
basic_durable_agent.memory_store._current_state["instances"][instance_id][
536512
"input"
537513
] = original_input
538514

@@ -542,7 +518,7 @@ def test_ensure_instance_exists(self, basic_durable_agent):
542518

543519
# Input should remain unchanged
544520
assert (
545-
basic_durable_agent.storage._current_state["instances"][instance_id][
521+
basic_durable_agent.memory_store._current_state["instances"][instance_id][
546522
"input"
547523
]
548524
== original_input
@@ -555,7 +531,7 @@ def test_process_user_message(self, basic_durable_agent):
555531
user_message_copy = {"role": "user", "content": "Hello, world!"}
556532

557533
# Set up instance
558-
basic_durable_agent.storage._current_state["instances"][instance_id] = {
534+
basic_durable_agent.memory_store._current_state["instances"][instance_id] = {
559535
"input": "Test task",
560536
"source": "test_source",
561537
"triggering_workflow_instance_id": None,
@@ -568,14 +544,14 @@ def test_process_user_message(self, basic_durable_agent):
568544
"trace_context": None,
569545
}
570546

571-
# Mock storage.add_message
572-
with patch.object(type(basic_durable_agent.storage), "add_message"):
547+
# Mock memory_store.add_message
548+
with patch.object(type(basic_durable_agent.memory_store), "add_message"):
573549
basic_durable_agent._process_user_message(
574550
instance_id, task, user_message_copy
575551
)
576552

577553
# Verify message was added to instance
578-
instance_data = basic_durable_agent.storage._current_state["instances"][
554+
instance_data = basic_durable_agent.memory_store._current_state["instances"][
579555
instance_id
580556
]
581557
assert len(instance_data["messages"]) == 1
@@ -589,7 +565,7 @@ def test_save_assistant_message(self, basic_durable_agent):
589565
assistant_message = {"role": "assistant", "content": "Hello back!"}
590566

591567
# Set up instance
592-
basic_durable_agent.storage._current_state["instances"][instance_id] = {
568+
basic_durable_agent.memory_store._current_state["instances"][instance_id] = {
593569
"input": "Test task",
594570
"source": "test_source",
595571
"triggering_workflow_instance_id": None,
@@ -602,12 +578,12 @@ def test_save_assistant_message(self, basic_durable_agent):
602578
"trace_context": None,
603579
}
604580

605-
# Mock storage.add_message
606-
with patch.object(type(basic_durable_agent.storage), "add_message"):
581+
# Mock memory_store.add_message
582+
with patch.object(type(basic_durable_agent.memory_store), "add_message"):
607583
basic_durable_agent._save_assistant_message(instance_id, assistant_message)
608584

609585
# Verify message was added to instance
610-
instance_data = basic_durable_agent.storage._current_state["instances"][
586+
instance_data = basic_durable_agent.memory_store._current_state["instances"][
611587
instance_id
612588
]
613589
assert len(instance_data["messages"]) == 1
@@ -620,7 +596,7 @@ def test_get_last_message_from_state(self, basic_durable_agent):
620596
instance_id = "test-instance-123"
621597

622598
# Set up instance with last_message
623-
basic_durable_agent.storage._current_state["instances"][instance_id] = {
599+
basic_durable_agent.memory_store._current_state["instances"][instance_id] = {
624600
"input": "Test task",
625601
"source": "test_source",
626602
"triggering_workflow_instance_id": None,
@@ -680,7 +656,7 @@ def test_append_tool_message_to_instance(self, basic_durable_agent):
680656
instance_id = "test-instance-123"
681657

682658
# Set up instance
683-
basic_durable_agent.storage._current_state["instances"][instance_id] = {
659+
basic_durable_agent.memory_store._current_state["instances"][instance_id] = {
684660
"input": "Test task",
685661
"source": "test_source",
686662
"triggering_workflow_instance_id": None,
@@ -707,7 +683,7 @@ def test_append_tool_message_to_instance(self, basic_durable_agent):
707683
)
708684

709685
# Verify instance was updated
710-
instance_data = basic_durable_agent.storage._current_state["instances"][
686+
instance_data = basic_durable_agent.memory_store._current_state["instances"][
711687
instance_id
712688
]
713689
assert len(instance_data["messages"]) == 1
@@ -721,7 +697,7 @@ def test_construct_messages_with_instance_history(self, basic_durable_agent):
721697
input_data = "Test input"
722698

723699
# Set up instance with messages
724-
basic_durable_agent.storage._current_state["instances"][instance_id] = {
700+
basic_durable_agent.memory_store._current_state["instances"][instance_id] = {
725701
"input": "Test task",
726702
"source": "test_source",
727703
"triggering_workflow_instance_id": None,
@@ -791,7 +767,7 @@ def test_register_agent(self, basic_durable_agent):
791767
store_name="test_store",
792768
store_key="agent_registry",
793769
agent_name=basic_durable_agent.name,
794-
agent_metadata=basic_durable_agent._agent_metadata,
770+
agent_metadata="test metadata",
795771
)
796772

797773
@pytest.mark.asyncio
@@ -820,8 +796,8 @@ def test_durable_agent_workflow_name(self, basic_durable_agent):
820796
def test_durable_agent_state_initialization(self, basic_durable_agent):
821797
"""Test that the agent state is properly initialized."""
822798
validated_state = DurableAgentWorkflowState.model_validate(
823-
basic_durable_agent.state
799+
basic_durable_agent.memory_store._current_state
824800
)
825801
assert isinstance(validated_state, DurableAgentWorkflowState)
826-
assert "instances" in basic_durable_agent.state
827-
assert basic_durable_agent.storage._current_state["instances"] == {}
802+
assert "instances" in basic_durable_agent.memory_store._current_state
803+
assert basic_durable_agent.memory_store._current_state["instances"] == {}

0 commit comments

Comments
 (0)