@@ -94,4 +94,105 @@ void shouldMatchUriAgainstTemplatePattern() {
94
94
assertFalse (uriTemplateManager .matches ("/api/users/123/comments/456" ));
95
95
}
96
96
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
+
97
198
}
0 commit comments