@@ -123,4 +123,95 @@ void builderShouldSupportMethodChaining() {
123123 assertThat (callback .getToolDefinition ().name ()).isEqualTo ("chained_tool_name" );
124124 }
125125
126+ @ Test
127+ void builderShouldNormalizeToolNameWithSpecialCharacters () {
128+ McpSyncClient mcpClient = Mockito .mock (McpSyncClient .class );
129+ McpSchema .Implementation clientInfo = new McpSchema .Implementation ("test-client" , "1.0.0" );
130+ when (mcpClient .getClientInfo ()).thenReturn (clientInfo );
131+
132+ Tool tool = Mockito .mock (Tool .class );
133+ when (tool .name ()).thenReturn ("test-tool-with-dashes" );
134+ when (tool .description ()).thenReturn ("Test description" );
135+
136+ SyncMcpToolCallback callback = SyncMcpToolCallback .builder ().mcpClient (mcpClient ).tool (tool ).build ();
137+
138+ assertThat (callback .getOriginalToolName ()).isEqualTo ("test-tool-with-dashes" );
139+ assertThat (callback .getToolDefinition ().name ()).isEqualTo ("test_tool_with_dashes" );
140+ }
141+
142+ @ Test
143+ void builderShouldUseCustomPrefixedNameWithoutNormalization () {
144+ McpSyncClient mcpClient = Mockito .mock (McpSyncClient .class );
145+
146+ Tool tool = Mockito .mock (Tool .class );
147+ when (tool .name ()).thenReturn ("original-name" );
148+ when (tool .description ()).thenReturn ("Test description" );
149+
150+ String customName = "custom-name-with-dashes" ;
151+
152+ SyncMcpToolCallback callback = SyncMcpToolCallback .builder ()
153+ .mcpClient (mcpClient )
154+ .tool (tool )
155+ .prefixedToolName (customName )
156+ .build ();
157+
158+ assertThat (callback .getOriginalToolName ()).isEqualTo ("original-name" );
159+ assertThat (callback .getToolDefinition ().name ()).isEqualTo (customName );
160+ }
161+
162+ @ Test
163+ void builderShouldHandlePrefixedToolNameAsNull () {
164+ McpSyncClient mcpClient = Mockito .mock (McpSyncClient .class );
165+ McpSchema .Implementation clientInfo = new McpSchema .Implementation ("test-client" , "1.0.0" );
166+ when (mcpClient .getClientInfo ()).thenReturn (clientInfo );
167+
168+ Tool tool = Mockito .mock (Tool .class );
169+ when (tool .name ()).thenReturn ("test-tool" );
170+ when (tool .description ()).thenReturn ("Description" );
171+
172+ SyncMcpToolCallback callback = SyncMcpToolCallback .builder ()
173+ .mcpClient (mcpClient )
174+ .tool (tool )
175+ .prefixedToolName (null )
176+ .build ();
177+
178+ // When null, it should use the default normalized name
179+ assertThat (callback ).isNotNull ();
180+ assertThat (callback .getToolDefinition ().name ()).isEqualTo ("test_tool" );
181+ }
182+
183+ @ Test
184+ void builderShouldCreateNewInstancesForEachBuild () {
185+ McpSyncClient mcpClient = Mockito .mock (McpSyncClient .class );
186+ McpSchema .Implementation clientInfo = new McpSchema .Implementation ("test-client" , "1.0.0" );
187+ when (mcpClient .getClientInfo ()).thenReturn (clientInfo );
188+
189+ Tool tool = Mockito .mock (Tool .class );
190+ when (tool .name ()).thenReturn ("test-tool" );
191+ when (tool .description ()).thenReturn ("Test description" );
192+
193+ SyncMcpToolCallback .Builder builder = SyncMcpToolCallback .builder ().mcpClient (mcpClient ).tool (tool );
194+
195+ SyncMcpToolCallback callback1 = builder .build ();
196+ SyncMcpToolCallback callback2 = builder .build ();
197+
198+ assertThat (callback1 ).isNotSameAs (callback2 );
199+ assertThat (callback1 .getOriginalToolName ()).isEqualTo (callback2 .getOriginalToolName ());
200+ }
201+
202+ @ Test
203+ void builderShouldThrowExceptionWhenToolContextConverterIsNull () {
204+ McpSyncClient mcpClient = Mockito .mock (McpSyncClient .class );
205+ Tool tool = Mockito .mock (Tool .class );
206+ when (tool .name ()).thenReturn ("test-tool" );
207+ when (tool .description ()).thenReturn ("Test description" );
208+
209+ assertThatThrownBy (() -> SyncMcpToolCallback .builder ()
210+ .mcpClient (mcpClient )
211+ .tool (tool )
212+ .toolContextToMcpMetaConverter (null )
213+ .build ()).isInstanceOf (IllegalArgumentException .class )
214+ .hasMessage ("ToolContextToMcpMetaConverter must not be null" );
215+ }
216+
126217}
0 commit comments