Doc-Weather-Bot / tests /test_workflow.py
AmritSbisht's picture
Upload 25 files
f974658 verified
import unittest
from unittest.mock import patch, MagicMock
from graph.workflow import LangGraphWorkflow, WorkflowState
class TestLangGraphWorkflow(unittest.TestCase):
def setUp(self):
# Create mocks for agents
self.router_agent_patch = patch('graph.workflow.RouterAgent')
self.weather_agent_patch = patch('graph.workflow.WeatherAgent')
self.rag_agent_patch = patch('graph.workflow.RAGAgent')
self.evaluator_patch = patch('graph.workflow.LangSmithEvaluator')
self.mock_router_agent_class = self.router_agent_patch.start()
self.mock_weather_agent_class = self.weather_agent_patch.start()
self.mock_rag_agent_class = self.rag_agent_patch.start()
self.mock_evaluator_class = self.evaluator_patch.start()
self.mock_router_agent = self.mock_router_agent_class.return_value
self.mock_weather_agent = self.mock_weather_agent_class.return_value
self.mock_rag_agent = self.mock_rag_agent_class.return_value
self.mock_evaluator = self.mock_evaluator_class.return_value
# Initialize workflow
self.workflow = LangGraphWorkflow()
def tearDown(self):
self.router_agent_patch.stop()
self.weather_agent_patch.stop()
self.rag_agent_patch.stop()
self.evaluator_patch.stop()
def test_route_to_weather(self):
# Configure mock
self.mock_router_agent.route_query.return_value = "weather"
# Create state
state = WorkflowState(query="What's the weather in London?")
# Call the method
result = self.workflow.route(state)
# Assertions
self.assertEqual(result.action, "weather")
self.mock_router_agent.route_query.assert_called_once_with("What's the weather in London?")
def test_route_to_document(self):
# Configure mock
self.mock_router_agent.route_query.return_value = "document"
# Create state
state = WorkflowState(query="What is LangChain?")
# Call the method
result = self.workflow.route(state)
# Assertions
self.assertEqual(result.action, "document")
self.mock_router_agent.route_query.assert_called_once_with("What is LangChain?")
def test_process_weather(self):
# Configure mock
self.mock_weather_agent.get_weather_response.return_value = {
"city": "London",
"weather_data": {"temp": 15.5},
"response": "The weather in London is 15.5°C."
}
# Create state
state = WorkflowState(query="What's the weather in London?", action="weather")
# Call the method
result = self.workflow.process_weather(state)
# Assertions
self.assertEqual(result.city, "London")
self.assertEqual(result.weather_data, {"temp": 15.5})
self.assertEqual(result.response, "The weather in London is 15.5°C.")