-
Notifications
You must be signed in to change notification settings - Fork 689
Expand file tree
/
Copy pathContentBlockTests.cs
More file actions
83 lines (70 loc) · 2.85 KB
/
ContentBlockTests.cs
File metadata and controls
83 lines (70 loc) · 2.85 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
using System.Text.Json;
using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Tests.Protocol;
public class ContentBlockTests
{
[Fact]
public void ResourceLinkBlock_SerializationRoundTrip_PreservesAllProperties()
{
// Arrange
var original = new ResourceLinkBlock
{
Uri = "https://example.com/resource",
Name = "Test Resource",
Description = "A test resource for validation",
MimeType = "text/plain",
Size = 1024
};
// Act - Serialize to JSON
string json = JsonSerializer.Serialize(original, McpJsonUtilities.DefaultOptions);
// Act - Deserialize back from JSON
var deserialized = JsonSerializer.Deserialize<ContentBlock>(json, McpJsonUtilities.DefaultOptions);
// Assert
Assert.NotNull(deserialized);
var resourceLink = Assert.IsType<ResourceLinkBlock>(deserialized);
Assert.Equal(original.Uri, resourceLink.Uri);
Assert.Equal(original.Name, resourceLink.Name);
Assert.Equal(original.Description, resourceLink.Description);
Assert.Equal(original.MimeType, resourceLink.MimeType);
Assert.Equal(original.Size, resourceLink.Size);
Assert.Equal("resource_link", resourceLink.Type);
}
[Fact]
public void ResourceLinkBlock_DeserializationWithMinimalProperties_Succeeds()
{
// Arrange - JSON with only required properties
const string Json = """
{
"type": "resource_link",
"uri": "https://example.com/minimal",
"name": "Minimal Resource"
}
""";
// Act
var deserialized = JsonSerializer.Deserialize<ContentBlock>(Json, McpJsonUtilities.DefaultOptions);
// Assert
Assert.NotNull(deserialized);
var resourceLink = Assert.IsType<ResourceLinkBlock>(deserialized);
Assert.Equal("https://example.com/minimal", resourceLink.Uri);
Assert.Equal("Minimal Resource", resourceLink.Name);
Assert.Null(resourceLink.Description);
Assert.Null(resourceLink.MimeType);
Assert.Null(resourceLink.Size);
Assert.Equal("resource_link", resourceLink.Type);
}
[Fact]
public void ResourceLinkBlock_DeserializationWithoutName_ThrowsJsonException()
{
// Arrange - JSON missing the required "name" property
const string Json = """
{
"type": "resource_link",
"uri": "https://example.com/missing-name"
}
""";
// Act & Assert
var exception = Assert.Throws<JsonException>(() =>
JsonSerializer.Deserialize<ContentBlock>(Json, McpJsonUtilities.DefaultOptions));
Assert.Contains("Name must be provided for 'resource_link' type", exception.Message);
}
}