Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/a2a/server/tasks/task_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ def __init__(
initial_message: The `Message` that initiated the task, if any.
Used when creating a new task object.
"""
if task_id is not None and not (isinstance(task_id, str) and task_id):
raise ValueError('Task ID must be a non-empty string')

self.task_id = task_id
self.context_id = context_id
self.task_store = task_store
Expand Down
14 changes: 14 additions & 0 deletions tests/server/tasks/test_task_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,20 @@ def task_manager(mock_task_store: AsyncMock) -> TaskManager:
)


@pytest.mark.parametrize('invalid_task_id', ['', 123])
def test_task_manager_invalid_task_id(
mock_task_store: AsyncMock, invalid_task_id: Any
):
"""Test that TaskManager raises ValueError for an invalid task_id."""
with pytest.raises(ValueError, match='Task ID must be a non-empty string'):
TaskManager(
task_id=invalid_task_id,
context_id='test_context',
task_store=mock_task_store,
initial_message=None,
)


@pytest.mark.asyncio
async def test_get_task_existing(
task_manager: TaskManager, mock_task_store: AsyncMock
Expand Down
Loading