Skip to content

Commit 571d03d

Browse files
tests: Update tests to replace deprecated methods
- Refactored tests to replace deprecated methods with updated ones for retrieving tools, resources, and prompts. - Enhanced assertions in tests to align with the new schema structure for registered elements. - Updated command tests to reflect changes in the MCP registry and output messages for better clarity.
1 parent 62aac05 commit 571d03d

File tree

6 files changed

+90
-113
lines changed

6 files changed

+90
-113
lines changed

config/mcp.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@
7272
| - `stdio`: for CLI clients.
7373
| - `http_dedicated`: for a standalone server running on a process.
7474
| - `http_integrated`: for serving through Laravel's routing system.
75+
|
76+
| The 'legacy' option is used to enable the deprecated HTTP+SSE transport.
77+
| It is not recommended to use this option.
7578
*/
7679
'transports' => [
7780
'stdio' => [
@@ -93,7 +96,7 @@
9396
'enabled' => (bool) env('MCP_HTTP_INTEGRATED_ENABLED', true),
9497
'legacy' => (bool) env('MCP_HTTP_INTEGRATED_LEGACY', false),
9598
'route_prefix' => env('MCP_HTTP_INTEGRATED_ROUTE_PREFIX', 'mcp'),
96-
'middleware' => explode(',', env('MCP_HTTP_INTEGRATED_MIDDLEWARE', 'api')),
99+
'middleware' => ['api'],
97100
'domain' => env('MCP_HTTP_INTEGRATED_DOMAIN'),
98101
'sse_poll_interval' => (int) env('MCP_HTTP_INTEGRATED_SSE_POLL_SECONDS', 1),
99102
'cors_origin' => env('MCP_HTTP_INTEGRATED_CORS_ORIGIN', '*'),

tests/Feature/Commands/DiscoverCommandTest.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ class DiscoverCommandTest extends TestCase
1212
public function test_discover_command_displays_correct_element_counts()
1313
{
1414
$registryMock = Mockery::mock(Registry::class);
15-
$registryMock->shouldReceive('allTools->count')->andReturn(2);
16-
$registryMock->shouldReceive('allResources->count')->andReturn(1);
17-
$registryMock->shouldReceive('allResourceTemplates->count')->andReturn(0);
18-
$registryMock->shouldReceive('allPrompts->count')->andReturn(3);
19-
$registryMock->shouldReceive('discoveryRanOrCached')->andReturn(true);
15+
$registryMock->shouldReceive('getTools')->andReturn(['tool1', 'tool2']);
16+
$registryMock->shouldReceive('getResources')->andReturn(['resource1']);
17+
$registryMock->shouldReceive('getResourceTemplates')->andReturn([]);
18+
$registryMock->shouldReceive('getPrompts')->andReturn(['prompt1', 'prompt2', 'prompt3']);
2019

2120
$serverMock = $this->mock(Server::class, function ($mock) use ($registryMock) {
2221
$mock->shouldReceive('discover')->once();

tests/Feature/Commands/ListCommandTest.php

Lines changed: 16 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44

55
use PhpMcp\Laravel\Tests\Stubs\App\Mcp\ManualTestHandler;
66
use PhpMcp\Laravel\Tests\TestCase;
7-
use PhpMcp\Server\Definitions\ToolDefinition;
8-
use PhpMcp\Server\Definitions\ResourceDefinition;
97
use PhpMcp\Server\Registry;
108
use PhpMcp\Server\Server;
11-
use PhpMcp\Server\Support\DocBlockParser;
12-
use PhpMcp\Server\Support\SchemaGenerator;
9+
use PhpMcp\Schema\Tool;
10+
use PhpMcp\Schema\Resource;
1311
use ArrayObject;
1412
use Illuminate\Support\Facades\Artisan;
1513
use Psr\Log\NullLogger;
@@ -24,29 +22,11 @@ protected function getEnvironmentSetUp($app)
2422

2523
private function populateRegistry(Registry $registry)
2624
{
27-
$logger = new NullLogger;
28-
$docBlockParser = new DocBlockParser($logger);
29-
$schemaGenerator = new SchemaGenerator($docBlockParser);
30-
31-
$tool1 = ToolDefinition::fromReflection(
32-
new \ReflectionMethod(ManualTestHandler::class, 'handleTool'),
33-
'list_tool_1',
34-
'Desc 1',
35-
$docBlockParser,
36-
$schemaGenerator
37-
);
38-
$resource1 = ResourceDefinition::fromReflection(
39-
new \ReflectionMethod(ManualTestHandler::class, 'handleResource'),
40-
'list_res_1',
41-
'Desc Res 1',
42-
'res://list/1',
43-
'text/plain',
44-
null,
45-
[],
46-
$docBlockParser
47-
);
48-
$registry->registerTool($tool1, true);
49-
$registry->registerResource($resource1, true);
25+
$tool1 = Tool::make('list_tool_1', ['type' => 'object'], 'Desc 1');
26+
$resource1 = Resource::make('res://list/1', 'list_res_1', 'Desc Res 1', 'text/plain');
27+
28+
$registry->registerTool($tool1, ManualTestHandler::class, 'handleTool', true);
29+
$registry->registerResource($resource1, ManualTestHandler::class, 'handleResource', true);
5030
}
5131

5232
public function test_list_command_shows_all_types_by_default()
@@ -90,7 +70,7 @@ public function test_list_command_json_output_is_correct()
9070
$this->assertArrayHasKey('tools', $jsonData);
9171
$this->assertArrayHasKey('resources', $jsonData);
9272
$this->assertCount(1, $jsonData['tools']);
93-
$this->assertEquals('list_tool_1', $jsonData['tools'][0]['toolName']);
73+
$this->assertEquals('list_tool_1', $jsonData['tools'][0]['name']);
9474
$this->assertEquals('res://list/1', $jsonData['resources'][0]['uri']);
9575
}
9676

@@ -107,28 +87,28 @@ public function test_list_command_handles_empty_registry_for_type()
10787
public function test_list_command_warns_if_discovery_not_run_and_no_manual_elements()
10888
{
10989
$this->artisan('mcp:list')
110-
->expectsOutputToContain('No MCP elements are manually registered, and discovery has not run')
90+
->expectsOutputToContain('MCP Registry is empty.')
91+
->expectsOutputToContain('Run `php artisan mcp:discover` to discover MCP elements.')
11192
->assertSuccessful();
11293
}
11394

11495
public function test_list_command_warns_if_discovery_ran_but_no_elements_found()
11596
{
11697
$registryMock = $this->mock(Registry::class);
11798
$registryMock->shouldReceive('hasElements')->andReturn(false);
118-
$registryMock->shouldReceive('discoveryRanOrCached')->andReturn(true); // Key difference
119-
$registryMock->shouldReceive('allTools')->andReturn(new ArrayObject());
120-
$registryMock->shouldReceive('allResources')->andReturn(new ArrayObject());
121-
$registryMock->shouldReceive('allPrompts')->andReturn(new ArrayObject());
122-
$registryMock->shouldReceive('allResourceTemplates')->andReturn(new ArrayObject());
123-
99+
$registryMock->shouldReceive('getTools')->andReturn([]);
100+
$registryMock->shouldReceive('getResources')->andReturn([]);
101+
$registryMock->shouldReceive('getPrompts')->andReturn([]);
102+
$registryMock->shouldReceive('getResourceTemplates')->andReturn([]);
124103

125104
$serverMock = $this->mock(Server::class, function ($mock) use ($registryMock) {
126105
$mock->shouldReceive('getRegistry')->andReturn($registryMock);
127106
});
128107
$this->app->instance(Server::class, $serverMock);
129108

130109
$this->artisan('mcp:list')
131-
->expectsOutputToContain('Discovery/cache load ran, but no MCP elements were found.')
110+
->expectsOutputToContain('MCP Registry is empty.')
111+
->expectsOutputToContain('Run `php artisan mcp:discover` to discover MCP elements.')
132112
->assertSuccessful();
133113
}
134114
}

tests/Feature/Commands/ServeCommandTest.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use PhpMcp\Laravel\Tests\TestCase;
66
use PhpMcp\Server\Server;
77
use PhpMcp\Server\Transports\HttpServerTransport;
8+
use PhpMcp\Server\Transports\StreamableHttpServerTransport;
89
use PhpMcp\Server\Transports\StdioServerTransport;
910
use Mockery;
1011
use Orchestra\Testbench\Attributes\DefineEnvironment;
@@ -55,7 +56,7 @@ public function test_serve_command_uses_http_transport_when_specified()
5556
$this->app->instance(Server::class, $serverMock);
5657

5758
$serverMock->shouldReceive('listen')->once()->with(
58-
Mockery::type(HttpServerTransport::class),
59+
Mockery::type(StreamableHttpServerTransport::class),
5960
);
6061

6162
$this->artisan('mcp:serve --transport=http --host=localhost --port=9091 --path-prefix=mcp_test_http')
@@ -78,13 +79,13 @@ public function test_serve_command_uses_http_transport_config_fallbacks()
7879
$hostProp->setAccessible(true);
7980
$portProp = $reflection->getProperty('port');
8081
$portProp->setAccessible(true);
81-
$prefixProp = $reflection->getProperty('mcpPathPrefix');
82+
$prefixProp = $reflection->getProperty('mcpPath');
8283
$prefixProp->setAccessible(true);
8384

84-
return $transport instanceof HttpServerTransport &&
85+
return $transport instanceof StreamableHttpServerTransport &&
8586
$hostProp->getValue($transport) === '0.0.0.0' &&
8687
$portProp->getValue($transport) === 8888 &&
87-
$prefixProp->getValue($transport) === 'configured_prefix';
88+
$prefixProp->getValue($transport) === '/configured_prefix';
8889
}),
8990
);
9091

tests/Feature/ManualRegistrationTest.php

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
use PhpMcp\Laravel\Tests\Stubs\App\Mcp\ManualTestHandler;
66
use PhpMcp\Laravel\Tests\Stubs\App\Mcp\ManualTestInvokableHandler;
77
use PhpMcp\Laravel\Tests\TestCase;
8-
use PhpMcp\Server\Definitions\PromptDefinition;
9-
use PhpMcp\Server\Definitions\ResourceDefinition;
10-
use PhpMcp\Server\Definitions\ResourceTemplateDefinition;
11-
use PhpMcp\Server\Definitions\ToolDefinition;
8+
use PhpMcp\Server\Elements\RegisteredTool;
9+
use PhpMcp\Server\Elements\RegisteredResource;
10+
use PhpMcp\Server\Elements\RegisteredResourceTemplate;
11+
use PhpMcp\Server\Elements\RegisteredPrompt;
1212

1313
class ManualRegistrationTest extends TestCase
1414
{
@@ -26,15 +26,15 @@ public function test_can_manually_register_a_tool()
2626

2727
$registry = $this->app->make('mcp.registry');
2828

29-
$tool = $registry->findTool('manual_test_tool');
29+
$tool = $registry->getTool('manual_test_tool');
3030

31-
$this->assertInstanceOf(ToolDefinition::class, $tool);
32-
$this->assertEquals('manual_test_tool', $tool->getName());
33-
$this->assertEquals('A manually registered test tool.', $tool->getDescription());
34-
$this->assertEquals(ManualTestHandler::class, $tool->getClassName());
35-
$this->assertEquals('handleTool', $tool->getMethodName());
36-
$this->assertArrayHasKey('input', $tool->getInputSchema()['properties']);
37-
$this->assertEquals('string', $tool->getInputSchema()['properties']['input']['type']);
31+
$this->assertInstanceOf(RegisteredTool::class, $tool);
32+
$this->assertEquals('manual_test_tool', $tool->schema->name);
33+
$this->assertEquals('A manually registered test tool.', $tool->schema->description);
34+
$this->assertEquals(ManualTestHandler::class, $tool->handlerClass);
35+
$this->assertEquals('handleTool', $tool->handlerMethod);
36+
$this->assertArrayHasKey('input', $tool->schema->inputSchema['properties']);
37+
$this->assertEquals('string', $tool->schema->inputSchema['properties']['input']['type']);
3838
}
3939

4040
public function test_can_manually_register_tool_using_handler_only()
@@ -49,12 +49,12 @@ public function test_can_manually_register_tool_using_handler_only()
4949
$this->setMcpDefinitions($definitionsContent);
5050

5151
$registry = $this->app->make('mcp.registry');
52-
$tool = $registry->findTool('handleTool');
52+
$tool = $registry->getTool('handleTool');
5353

5454
$this->assertNotNull($tool);
55-
$this->assertEquals(ManualTestHandler::class, $tool->getClassName());
56-
$this->assertEquals('handleTool', $tool->getMethodName());
57-
$this->assertEquals('A sample tool handler.', $tool->getDescription());
55+
$this->assertEquals(ManualTestHandler::class, $tool->handlerClass);
56+
$this->assertEquals('handleTool', $tool->handlerMethod);
57+
$this->assertEquals('A sample tool handler.', $tool->schema->description);
5858
}
5959

6060
public function test_can_manually_register_a_resource()
@@ -63,26 +63,27 @@ public function test_can_manually_register_a_resource()
6363
<?php
6464
use PhpMcp\Laravel\Facades\Mcp;
6565
use PhpMcp\Laravel\Tests\Stubs\App\Mcp\ManualTestHandler;
66+
use PhpMcp\Schema\Annotations;
6667
6768
Mcp::resource('manual://config/app-setting', [ManualTestHandler::class, 'handleResource'])
6869
->name('manual_app_setting')
6970
->mimeType('application/json')
7071
->size(1024)
71-
->annotations(['category' => 'config']);
72+
->annotations(Annotations::make(priority:0.8));
7273
PHP;
7374
$this->setMcpDefinitions($definitionsContent);
7475

7576
$registry = $this->app->make('mcp.registry');
76-
$resource = $registry->findResourceByUri('manual://config/app-setting');
77-
78-
$this->assertInstanceOf(ResourceDefinition::class, $resource);
79-
$this->assertEquals('manual_app_setting', $resource->getName());
80-
$this->assertEquals('A sample resource handler.', $resource->getDescription());
81-
$this->assertEquals('application/json', $resource->getMimeType());
82-
$this->assertEquals(1024, $resource->getSize());
83-
$this->assertEquals(['category' => 'config'], $resource->getAnnotations());
84-
$this->assertEquals(ManualTestHandler::class, $resource->getClassName());
85-
$this->assertEquals('handleResource', $resource->getMethodName());
77+
$resource = $registry->getResource('manual://config/app-setting');
78+
79+
$this->assertInstanceOf(RegisteredResource::class, $resource);
80+
$this->assertEquals('manual_app_setting', $resource->schema->name);
81+
$this->assertEquals('A sample resource handler.', $resource->schema->description);
82+
$this->assertEquals('application/json', $resource->schema->mimeType);
83+
$this->assertEquals(1024, $resource->schema->size);
84+
$this->assertEquals(['priority' => 0.8], $resource->schema->annotations->toArray());
85+
$this->assertEquals(ManualTestHandler::class, $resource->handlerClass);
86+
$this->assertEquals('handleResource', $resource->handlerMethod);
8687
}
8788

8889
public function test_can_manually_register_a_prompt_with_invokable_class_handler()
@@ -98,13 +99,13 @@ public function test_can_manually_register_a_prompt_with_invokable_class_handler
9899
$this->setMcpDefinitions($definitionsContent);
99100

100101
$registry = $this->app->make('mcp.registry');
101-
$prompt = $registry->findPrompt('manual_invokable_prompt');
102+
$prompt = $registry->getPrompt('manual_invokable_prompt');
102103

103-
$this->assertInstanceOf(PromptDefinition::class, $prompt);
104-
$this->assertEquals('manual_invokable_prompt', $prompt->getName());
105-
$this->assertEquals('A prompt handled by an invokable class.', $prompt->getDescription());
106-
$this->assertEquals(ManualTestInvokableHandler::class, $prompt->getClassName());
107-
$this->assertEquals('__invoke', $prompt->getMethodName());
104+
$this->assertInstanceOf(RegisteredPrompt::class, $prompt);
105+
$this->assertEquals('manual_invokable_prompt', $prompt->schema->name);
106+
$this->assertEquals('A prompt handled by an invokable class.', $prompt->schema->description);
107+
$this->assertEquals(ManualTestInvokableHandler::class, $prompt->handlerClass);
108+
$this->assertEquals('__invoke', $prompt->handlerMethod);
108109
}
109110

110111
public function test_can_manually_register_a_resource_template_via_facade()
@@ -121,16 +122,15 @@ public function test_can_manually_register_a_resource_template_via_facade()
121122
$this->setMcpDefinitions($definitionsContent);
122123

123124
$registry = $this->app->make('mcp.registry');
124-
$templateMatch = $registry->findResourceTemplateByUri('manual://item/123/details');
125-
126-
$this->assertNotNull($templateMatch);
127-
$template = $templateMatch['definition'];
128-
$this->assertInstanceOf(ResourceTemplateDefinition::class, $template);
129-
$this->assertEquals('manual://item/{itemId}/details', $template->getUriTemplate());
130-
$this->assertEquals('manual_item_details_template', $template->getName());
131-
$this->assertEquals('A sample resource template handler.', $template->getDescription());
132-
$this->assertEquals('application/vnd.api+json', $template->getMimeType());
133-
$this->assertEquals(ManualTestHandler::class, $template->getClassName());
134-
$this->assertEquals('handleTemplate', $template->getMethodName());
125+
$template = $registry->getResource('manual://item/123/details');
126+
127+
$this->assertNotNull($template);
128+
$this->assertInstanceOf(RegisteredResourceTemplate::class, $template);
129+
$this->assertEquals('manual://item/{itemId}/details', $template->schema->uriTemplate);
130+
$this->assertEquals('manual_item_details_template', $template->schema->name);
131+
$this->assertEquals('A sample resource template handler.', $template->schema->description);
132+
$this->assertEquals('application/vnd.api+json', $template->schema->mimeType);
133+
$this->assertEquals(ManualTestHandler::class, $template->handlerClass);
134+
$this->assertEquals('handleTemplate', $template->handlerMethod);
135135
}
136136
}

0 commit comments

Comments
 (0)