Skip to content

Commit 611004c

Browse files
committed
test: Improving tests coverage for McpUriTemplateManager
Co-authored-by: Oleksandr Klymenko <[email protected]> Signed-off-by: Oleksandr Klymenko <[email protected]>
1 parent 713ee1a commit 611004c

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

mcp/src/test/java/io/modelcontextprotocol/McpUriTemplateManagerTests.java

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,105 @@ void shouldMatchUriAgainstTemplatePattern() {
9494
assertFalse(uriTemplateManager.matches("/api/users/123/comments/456"));
9595
}
9696

97+
@Test
98+
void shouldHandleSpecialCharactersInVariableValues() {
99+
Map<String, String> values = this.uriTemplateFactory.create("/api/users/{userId}/files/{fileName}")
100+
.extractVariableValues("/api/users/[email protected]/files/my-file.txt");
101+
assertEquals(2, values.size());
102+
assertEquals("[email protected]", values.get("userId"));
103+
assertEquals("my-file.txt", values.get("fileName"));
104+
}
105+
106+
@Test
107+
void shouldHandleComplexNestedPaths() {
108+
var uriTemplateManager = this.uriTemplateFactory
109+
.create("/api/v1/organizations/{orgId}/projects/{projectId}/tasks/{taskId}");
110+
111+
List<String> variables = uriTemplateManager.getVariableNames();
112+
assertEquals(3, variables.size());
113+
assertEquals("orgId", variables.get(0));
114+
assertEquals("projectId", variables.get(1));
115+
assertEquals("taskId", variables.get(2));
116+
117+
Map<String, String> values = uriTemplateManager
118+
.extractVariableValues("/api/v1/organizations/acme/projects/web-app/tasks/1");
119+
assertEquals("acme", values.get("orgId"));
120+
assertEquals("web-app", values.get("projectId"));
121+
assertEquals("1", values.get("taskId"));
122+
}
123+
124+
@Test
125+
void shouldNotMatchWhenPathSegmentCountDiffers() {
126+
var uriTemplateManager = this.uriTemplateFactory.create("/api/users/{userId}/posts/{postId}");
127+
128+
assertFalse(uriTemplateManager.matches("/api/users/1"));
129+
assertFalse(uriTemplateManager.matches("/api/users/1/posts"));
130+
assertFalse(uriTemplateManager.matches("/api/users/1/posts/1/comments"));
131+
}
132+
133+
@Test
134+
void shouldNotMatchWhenStaticSegmentsDiffer() {
135+
var uriTemplateManager = this.uriTemplateFactory.create("/api/users/{userId}/posts/{postId}");
136+
137+
assertFalse(uriTemplateManager.matches("/api/user/1/posts/1"));
138+
assertFalse(uriTemplateManager.matches("/api/users/1/post/1"));
139+
assertFalse(uriTemplateManager.matches("/v1/users/1/posts/1"));
140+
}
141+
142+
@Test
143+
void shouldHandleVariableAtBeginningOfPath() {
144+
var uriTemplateManager = this.uriTemplateFactory.create("/{version}/api/users/{userId}");
145+
146+
List<String> variables = uriTemplateManager.getVariableNames();
147+
assertEquals(2, variables.size());
148+
assertEquals("version", variables.get(0));
149+
assertEquals("userId", variables.get(1));
150+
151+
assertTrue(uriTemplateManager.matches("/v1/api/users/1"));
152+
153+
Map<String, String> values = uriTemplateManager.extractVariableValues("/v1/api/users/1");
154+
assertEquals("v1", values.get("version"));
155+
assertEquals("1", values.get("userId"));
156+
}
157+
158+
@Test
159+
void shouldHandleTemplateWithSingleVariable() {
160+
var uriTemplateManager = this.uriTemplateFactory.create("/api/users/{id}");
161+
162+
List<String> variables = uriTemplateManager.getVariableNames();
163+
assertEquals(1, variables.size());
164+
assertEquals("id", variables.get(0));
165+
166+
Map<String, String> values = uriTemplateManager.extractVariableValues("/api/users/1");
167+
assertEquals("1", values.get("id"));
168+
169+
assertTrue(uriTemplateManager.matches("/api/users/1"));
170+
}
171+
172+
@Test
173+
void shouldHandleRootPathTemplate() {
174+
var uriTemplateManager = this.uriTemplateFactory.create("/{id}");
175+
176+
List<String> variables = uriTemplateManager.getVariableNames();
177+
assertEquals(1, variables.size());
178+
assertEquals("id", variables.get(0));
179+
180+
assertTrue(uriTemplateManager.matches("/1"));
181+
assertFalse(uriTemplateManager.matches("/1/something"));
182+
183+
Map<String, String> values = uriTemplateManager.extractVariableValues("/abc");
184+
assertEquals("abc", values.get("id"));
185+
}
186+
187+
@Test
188+
void shouldHandleConsecutiveVariables() {
189+
var uriTemplateManager = this.uriTemplateFactory.create("/api/{version}/{userId}");
190+
191+
assertTrue(uriTemplateManager.matches("/api/v1/1"));
192+
193+
Map<String, String> values = uriTemplateManager.extractVariableValues("/api/v2/1");
194+
assertEquals("v2", values.get("version"));
195+
assertEquals("1", values.get("userId"));
196+
}
197+
97198
}

0 commit comments

Comments
 (0)