forked from modelcontextprotocol/php-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathResourceTemplateTest.php
More file actions
107 lines (89 loc) · 3.32 KB
/
Copy pathResourceTemplateTest.php
File metadata and controls
107 lines (89 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?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\Unit\Schema;
use Mcp\Exception\InvalidArgumentException;
use Mcp\Schema\ResourceTemplate;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
class ResourceTemplateTest extends TestCase
{
private const VALID_URI = 'https://example.com/list-books/{id}';
public function testConstructorValid(): void
{
$uri = self::VALID_URI;
$resource = new ResourceTemplate(
uriTemplate: $uri,
name: 'list-books',
);
$this->assertInstanceOf(ResourceTemplate::class, $resource);
$this->assertSame($uri, $resource->uriTemplate);
}
public function testConstructorInvalid(): void
{
$uri = '/list-books';
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Invalid URI template : "/list-books" must be a valid URI template with at least one placeholder.');
$resource = new ResourceTemplate(
uriTemplate: $uri,
name: 'list-books',
);
}
#[DataProvider('provideValidTemplates')]
public function testConstructorAcceptsTemplates(string $uriTemplate): void
{
$resource = new ResourceTemplate(
uriTemplate: $uriTemplate,
name: 'test-template',
);
$this->assertInstanceOf(ResourceTemplate::class, $resource);
$this->assertSame($uriTemplate, $resource->uriTemplate);
}
public static function provideValidTemplates(): iterable
{
yield 'custom scheme without slashes' => ['config:{key}'];
yield 'custom scheme with slashes' => ['config://{key}'];
yield 'urn-style template' => ['urn:resource:{id}'];
}
public function testFromArrayValid(): void
{
$resource = ResourceTemplate::fromArray([
'uriTemplate' => self::VALID_URI,
'name' => 'list-books',
]);
$this->assertInstanceOf(ResourceTemplate::class, $resource);
$this->assertSame(self::VALID_URI, $resource->uriTemplate);
$this->assertSame('list-books', $resource->name);
$this->assertNull($resource->description);
$this->assertNull($resource->meta);
}
#[DataProvider('provideInvalidResources')]
public function testFromArrayInvalid(array $input, string $expectedExceptionMessage): void
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage($expectedExceptionMessage);
ResourceTemplate::fromArray($input);
}
public static function provideInvalidResources(): iterable
{
yield 'missing uri' => [[], 'Invalid or missing "uriTemplate" in ResourceTemplate data.'];
yield 'missing name' => [
['uriTemplate' => self::VALID_URI],
'Invalid or missing "name" in ResourceTemplate data.',
];
yield 'meta' => [
[
'uriTemplate' => self::VALID_URI,
'name' => 'list-books',
'_meta' => 'foo',
],
'Invalid "_meta" in ResourceTemplate data.',
];
}
}