Skip to content

Commit 864020d

Browse files
author
klapaudius
committed
Add support for additional configuration parameters
Extended the KlpMcpServerExtension to handle more configuration options, including middlewares, tools, prompts, and resources. Updated tests to validate the new parameters and ensure proper exception handling for invalid configurations. Added `symfony/config` as a dependency to support these changes.
1 parent 455c512 commit 864020d

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"ext-json": "*",
1010
"ext-redis": "*",
1111
"psr/log": "^3.0",
12+
"symfony/config": "^7.2",
1213
"symfony/console": "~7.0",
1314
"symfony/dependency-injection": "~7.0",
1415
"symfony/http-foundation": "~7.0",

src/DependencyInjection/KlpMcpServerExtension.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,14 @@ public function load(array $configs, ContainerBuilder $container): void
1616
$loader->load('services.xml');
1717

1818
$container->setParameter('klp_mcp_server.enabled', $config['enabled']);
19-
$container->setParameter('klp_mcp_server.default_path', $config['default_path']);
2019
$container->setParameter('klp_mcp_server.server.name', $config['server']['name']);
2120
$container->setParameter('klp_mcp_server.server.version', $config['server']['version']);
21+
$container->setParameter('klp_mcp_server.default_path', $config['default_path']);
22+
$container->setParameter('klp_mcp_server.middlewares', $config['middlewares']);
23+
$container->setParameter('klp_mcp_server.provider', 'klp_mcp_server.provider.'.$config['server_provider']);
2224
$container->setParameter('klp_mcp_server.adapter', 'klp_mcp_server.adapter.'.$config['sse_adapter']);
25+
$container->setParameter('klp_mcp_server.tools', $config['tools']);
26+
$container->setParameter('klp_mcp_server.prompts', $config['prompts']);
27+
$container->setParameter('klp_mcp_server.resources', $config['resources']);
2328
}
2429
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
namespace KLP\KlpMcpServer\Tests\DependencyInjection;
4+
5+
use KLP\KlpMcpServer\DependencyInjection\KlpMcpServerExtension;
6+
use KLP\KlpMcpServer\Services\ToolService\Examples\HelloWorldTool;
7+
use KLP\KlpMcpServer\Services\ToolService\Examples\VersionCheckTool;
8+
use PHPUnit\Framework\Attributes\Small;
9+
use PHPUnit\Framework\TestCase;
10+
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
11+
use Symfony\Component\DependencyInjection\ContainerBuilder;
12+
13+
#[Small]
14+
class KlpMcpServerExtensionTest extends TestCase
15+
{
16+
private KlpMcpServerExtension $extension;
17+
private ContainerBuilder $container;
18+
19+
protected function setUp(): void
20+
{
21+
$this->extension = new KlpMcpServerExtension();
22+
$this->container = new ContainerBuilder();
23+
}
24+
25+
public function test_load_sets_all_parameters_correctly(): void
26+
{
27+
$configs = [
28+
'enabled' => true,
29+
'server' => [
30+
'name' => 'TestServer',
31+
'version' => '1.0',
32+
],
33+
'default_path' => '/default/path',
34+
'middlewares' => ['middleware1', 'middleware2'],
35+
'server_provider' => 'sse',
36+
'sse_adapter' => 'custom_adapter',
37+
'tools' => [HelloWorldTool::class, VersionCheckTool::class],
38+
'prompts' => ['prompt1', 'prompt2'],
39+
'resources' => ['resource1', 'resource2'],
40+
];
41+
42+
$this->extension->load([$configs], $this->container);
43+
44+
$this->assertTrue($this->container->getParameter('klp_mcp_server.enabled'));
45+
$this->assertEquals('TestServer', $this->container->getParameter('klp_mcp_server.server.name'));
46+
$this->assertEquals('1.0', $this->container->getParameter('klp_mcp_server.server.version'));
47+
$this->assertEquals('/default/path', $this->container->getParameter('klp_mcp_server.default_path'));
48+
$this->assertEquals(['middleware1', 'middleware2'], $this->container->getParameter('klp_mcp_server.middlewares'));
49+
$this->assertEquals('klp_mcp_server.provider.sse', $this->container->getParameter('klp_mcp_server.provider'));
50+
$this->assertEquals('klp_mcp_server.adapter.custom_adapter', $this->container->getParameter('klp_mcp_server.adapter'));
51+
$this->assertEquals([HelloWorldTool::class, VersionCheckTool::class], $this->container->getParameter('klp_mcp_server.tools'));
52+
$this->assertEquals(['prompt1', 'prompt2'], $this->container->getParameter('klp_mcp_server.prompts'));
53+
$this->assertEquals(['resource1', 'resource2'], $this->container->getParameter('klp_mcp_server.resources'));
54+
}
55+
56+
public function test_load_throws_exception_for_invalid_config(): void
57+
{
58+
$this->expectException(InvalidConfigurationException::class);
59+
60+
$configs = [
61+
'enabled' => true,
62+
'server' => [
63+
'name' => null
64+
],
65+
];
66+
67+
$this->extension->load([$configs], $this->container);
68+
}
69+
}

0 commit comments

Comments
 (0)