From 857670dcd6ba7a64e72f8eded969ce29ad163d1c Mon Sep 17 00:00:00 2001 From: guanxu <1510424541@qq.com> Date: Tue, 9 Dec 2025 09:52:58 +0800 Subject: [PATCH] test: Add unit test for ToolCallAdvisor#doFinalizeLoop Signed-off-by: guanxu <1510424541@qq.com> --- .../client/advisor/ToolCallAdvisorTests.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/advisor/ToolCallAdvisorTests.java b/spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/advisor/ToolCallAdvisorTests.java index 7328ff6e317..34a543cc9eb 100644 --- a/spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/advisor/ToolCallAdvisorTests.java +++ b/spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/advisor/ToolCallAdvisorTests.java @@ -392,7 +392,8 @@ void testBuilderGetters() { @Test void testExtendedAdvisorWithCustomHooks() { - int[] hookCallCounts = { 0, 0, 0 }; // initializeLoop, beforeCall, afterCall + int[] hookCallCounts = { 0, 0, 0, 0 }; // initializeLoop, beforeCall, afterCall, + // doFinalizeLoop // Create extended advisor to verify hooks are called TestableToolCallAdvisor advisor = new TestableToolCallAdvisor(this.toolCallingManager, @@ -413,11 +414,13 @@ void testExtendedAdvisorWithCustomHooks() { assertThat(hookCallCounts[0]).isEqualTo(1); // doInitializeLoop called once assertThat(hookCallCounts[1]).isEqualTo(1); // doBeforeCall called once assertThat(hookCallCounts[2]).isEqualTo(1); // doAfterCall called once + assertThat(hookCallCounts[3]).isEqualTo(1); // doFinalizeLoop called once } @Test void testExtendedAdvisorHooksCalledMultipleTimesWithToolCalls() { - int[] hookCallCounts = { 0, 0, 0 }; // initializeLoop, beforeCall, afterCall + int[] hookCallCounts = { 0, 0, 0, 0 }; // initializeLoop, beforeCall, afterCall, + // doFinalizeLoop TestableToolCallAdvisor advisor = new TestableToolCallAdvisor(this.toolCallingManager, BaseAdvisor.HIGHEST_PRECEDENCE + 300, hookCallCounts); @@ -454,6 +457,8 @@ void testExtendedAdvisorHooksCalledMultipleTimesWithToolCalls() { // iteration) assertThat(hookCallCounts[2]).isEqualTo(2); // doAfterCall called twice (each // iteration) + assertThat(hookCallCounts[3]).isEqualTo(1); // doFinalizeLoop called once + // (after loop) } @Test @@ -606,6 +611,15 @@ protected ChatClientResponse doAfterCall(ChatClientResponse chatClientResponse, return super.doAfterCall(chatClientResponse, callAdvisorChain); } + @Override + protected ChatClientResponse doFinalizeLoop(ChatClientResponse chatClientResponse, + CallAdvisorChain callAdvisorChain) { + if (this.hookCallCounts != null) { + this.hookCallCounts[3]++; + } + return super.doFinalizeLoop(chatClientResponse, callAdvisorChain); + } + static TestableBuilder testBuilder() { return new TestableBuilder(); }