@@ -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