@@ -1783,3 +1783,85 @@ async def test_on_resubscribe_to_task_in_terminal_state(terminal_state):
17831783 in exc_info .value .error .message
17841784 )
17851785 mock_task_store .get .assert_awaited_once_with (task_id )
1786+
1787+
1788+ @pytest .mark .asyncio
1789+ async def test_on_message_send_task_id_provided_but_task_not_found ():
1790+ """Test on_message_send when taskId is provided but task doesn't exist."""
1791+ task_id = 'nonexistent_task'
1792+ mock_task_store = AsyncMock (spec = TaskStore )
1793+
1794+ request_handler = DefaultRequestHandler (
1795+ agent_executor = DummyAgentExecutor (), task_store = mock_task_store
1796+ )
1797+
1798+ params = MessageSendParams (
1799+ message = Message (
1800+ role = Role .user ,
1801+ messageId = 'msg_nonexistent' ,
1802+ parts = [Part (root = TextPart (text = 'Hello' ))],
1803+ taskId = task_id ,
1804+ contextId = 'ctx1' ,
1805+ )
1806+ )
1807+
1808+ from a2a .utils .errors import ServerError
1809+
1810+ # Mock TaskManager.get_task to return None (task not found)
1811+ with patch (
1812+ 'a2a.server.request_handlers.default_request_handler.TaskManager.get_task' ,
1813+ return_value = None ,
1814+ ):
1815+ with pytest .raises (ServerError ) as exc_info :
1816+ await request_handler .on_message_send (
1817+ params , create_server_call_context ()
1818+ )
1819+
1820+ assert isinstance (exc_info .value .error , TaskNotFoundError )
1821+ assert exc_info .value .error .message
1822+ assert (
1823+ f'Task { task_id } was specified but does not exist'
1824+ in exc_info .value .error .message
1825+ )
1826+
1827+
1828+ @pytest .mark .asyncio
1829+ async def test_on_message_send_stream_task_id_provided_but_task_not_found ():
1830+ """Test on_message_send_stream when taskId is provided but task doesn't exist."""
1831+ task_id = 'nonexistent_stream_task'
1832+ mock_task_store = AsyncMock (spec = TaskStore )
1833+
1834+ request_handler = DefaultRequestHandler (
1835+ agent_executor = DummyAgentExecutor (), task_store = mock_task_store
1836+ )
1837+
1838+ params = MessageSendParams (
1839+ message = Message (
1840+ role = Role .user ,
1841+ messageId = 'msg_nonexistent_stream' ,
1842+ parts = [Part (root = TextPart (text = 'Hello' ))],
1843+ taskId = task_id ,
1844+ contextId = 'ctx1' ,
1845+ )
1846+ )
1847+
1848+ from a2a .utils .errors import ServerError
1849+
1850+ # Mock TaskManager.get_task to return None (task not found)
1851+ with patch (
1852+ 'a2a.server.request_handlers.default_request_handler.TaskManager.get_task' ,
1853+ return_value = None ,
1854+ ):
1855+ with pytest .raises (ServerError ) as exc_info :
1856+ # Need to consume the async generator to trigger the error
1857+ async for _ in request_handler .on_message_send_stream (
1858+ params , create_server_call_context ()
1859+ ):
1860+ pass
1861+
1862+ assert isinstance (exc_info .value .error , TaskNotFoundError )
1863+ assert exc_info .value .error .message
1864+ assert (
1865+ f'Task { task_id } was specified but does not exist'
1866+ in exc_info .value .error .message
1867+ )
0 commit comments