* refactor: Separate Registry concerns following SOLID principles [WIP] - Extract ReferenceProvider and ReferenceRegistryInterface interfaces - Create DefaultToolExecutor with ReferenceHandlerInterface - Remove execution responsibility from Registry class - Enable custom handler and executor implementations * refactor: implement SOLID principles with separated execution concerns * Create DefaultResourceReader, DefaultPromptGetter * Refactor JsonRpc Handler and RequestHandlers to use dedicated executors * Update ServerBuilder to support custom executors via dependency injection * chore: remove extra comments * feat: introduce DispatchableRegistry for enhanced tool and resource management * refactor: use proper interfaces * refactor: implement HandlerInterface for improved abstraction and flexibility * test: add unit tests for DispatchableRegistry and Registry classes * refactor: cover with unit tests Resource reader, Prompt getter and Tool executor * cs fix * phpstan fix * test: add unit tests for CallToolHandler, GetPromptHandler, PingHandler, and ReadResourceHandler * refactor: revert Handler * chore: remove style guide for tests * refactor: remove "Default" prefix from classes * refactor: remove DispatchableRegistry * refactor: use package specific exception classes * refactor: remove DispatchableRegistry * refactor: add logger support to PromptGetter and ResourceReader classes * Update src/Capability/Prompt/PromptGetter.php Co-authored-by: Christopher Hertel <mail@christopher-hertel.de> * refactor: Use FQN for Resource class to avoid cs-fixer misinterpreting it as `resource` * refactor: rename ToolExecutor to ToolCaller and related classes for clarity and consistency * refactor: add missed docblock * refactor: rename ToolExecutor references to ToolCaller * refactor: rename ToolCallerTest property and variable references * cs fix * ignore some phpstan errors --------- Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>
47 lines
1.4 KiB
PHP
47 lines
1.4 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the official PHP MCP SDK.
|
|
*
|
|
* A collaboration between Symfony and the PHP Foundation.
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Mcp\Tests;
|
|
|
|
use Mcp\JsonRpc\Handler;
|
|
use Mcp\Server;
|
|
use Mcp\Server\Transport\InMemoryTransport;
|
|
use PHPUnit\Framework\MockObject\Stub\Exception;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Psr\Log\NullLogger;
|
|
|
|
class ServerTest extends TestCase
|
|
{
|
|
public function testJsonExceptions()
|
|
{
|
|
$logger = $this->getMockBuilder(NullLogger::class)
|
|
->disableOriginalConstructor()
|
|
->onlyMethods(['error'])
|
|
->getMock();
|
|
$logger->expects($this->once())->method('error');
|
|
|
|
$handler = $this->getMockBuilder(Handler::class)
|
|
->disableOriginalConstructor()
|
|
->onlyMethods(['process'])
|
|
->getMock();
|
|
|
|
$handler->expects($this->exactly(2))->method('process')->willReturnOnConsecutiveCalls(new Exception(new \JsonException('foobar')), ['success']);
|
|
|
|
$transport = $this->getMockBuilder(InMemoryTransport::class)
|
|
->setConstructorArgs([['foo', 'bar']])
|
|
->onlyMethods(['send'])
|
|
->getMock();
|
|
$transport->expects($this->once())->method('send')->with('success');
|
|
|
|
$server = new Server($handler, $logger);
|
|
$server->connect($transport);
|
|
}
|
|
}
|