From a5064cc00751b4a1c823641500685f91fd8f209c Mon Sep 17 00:00:00 2001 From: Chris Guidry Date: Thu, 18 Dec 2025 11:37:06 -0500 Subject: [PATCH] Add end-to-end tests for custom-named resources and templates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../tasks/test_server_tasks_parameter.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/server/tasks/test_server_tasks_parameter.py b/tests/server/tasks/test_server_tasks_parameter.py index 073de120a..90813814e 100644 --- a/tests/server/tasks/test_server_tasks_parameter.py +++ b/tests/server/tasks/test_server_tasks_parameter.py @@ -334,3 +334,53 @@ async def test_task_with_custom_tool_name(): assert not task.returned_immediately result = await task assert result.data == "result from custom-named tool" + + +async def test_task_with_custom_resource_name(): + """Resources with custom names work correctly as tasks. + + When a resource is registered with a custom name different from the function + name, task execution should use the custom name for Docket lookup. + """ + mcp = FastMCP("test", tasks=True) + + @mcp.resource("test://resource", name="custom-resource-name") + async def my_resource_func() -> str: + return "result from custom-named resource" + + async with Client(mcp) as client: + # Verify the resource is registered with its custom name in Docket + docket = mcp.docket + assert docket is not None + assert "custom-resource-name" in docket.tasks + + # Call the resource as a task + task = await client.read_resource("test://resource", task=True) + assert not task.returned_immediately + result = await task.result() + assert result[0].text == "result from custom-named resource" + + +async def test_task_with_custom_template_name(): + """Resource templates with custom names work correctly as tasks. + + When a template is registered with a custom name different from the function + name, task execution should use the custom name for Docket lookup. + """ + mcp = FastMCP("test", tasks=True) + + @mcp.resource("test://{item_id}", name="custom-template-name") + async def my_template_func(item_id: str) -> str: + return f"result for {item_id}" + + async with Client(mcp) as client: + # Verify the template is registered with its custom name in Docket + docket = mcp.docket + assert docket is not None + assert "custom-template-name" in docket.tasks + + # Call the template as a task + task = await client.read_resource("test://123", task=True) + assert not task.returned_immediately + result = await task.result() + assert result[0].text == "result for 123"