diff --git a/advisors/spring-ai-advisors-vector-store/src/test/java/org/springframework/ai/chat/client/advisor/vectorstore/VectorStoreChatMemoryAdvisorTests.java b/advisors/spring-ai-advisors-vector-store/src/test/java/org/springframework/ai/chat/client/advisor/vectorstore/VectorStoreChatMemoryAdvisorTests.java index 749a4ffeef9..9830720e59e 100644 --- a/advisors/spring-ai-advisors-vector-store/src/test/java/org/springframework/ai/chat/client/advisor/vectorstore/VectorStoreChatMemoryAdvisorTests.java +++ b/advisors/spring-ai-advisors-vector-store/src/test/java/org/springframework/ai/chat/client/advisor/vectorstore/VectorStoreChatMemoryAdvisorTests.java @@ -19,8 +19,11 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.springframework.ai.chat.prompt.PromptTemplate; import org.springframework.ai.vectorstore.VectorStore; +import reactor.core.scheduler.Scheduler; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** @@ -91,4 +94,116 @@ void whenDefaultTopKIsNegativeThenThrow() { .hasMessageContaining("topK must be greater than 0"); } + @Test + void whenBuilderWithValidVectorStoreThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + + VectorStoreChatMemoryAdvisor advisor = VectorStoreChatMemoryAdvisor.builder(vectorStore).build(); + + assertThat(advisor).isNotNull(); + } + + @Test + void whenBuilderWithAllValidParametersThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + Scheduler scheduler = Mockito.mock(Scheduler.class); + PromptTemplate systemPromptTemplate = Mockito.mock(PromptTemplate.class); + + VectorStoreChatMemoryAdvisor advisor = VectorStoreChatMemoryAdvisor.builder(vectorStore) + .conversationId("test-conversation") + .scheduler(scheduler) + .systemPromptTemplate(systemPromptTemplate) + .defaultTopK(5) + .build(); + + assertThat(advisor).isNotNull(); + } + + @Test + void whenDefaultConversationIdIsBlankThenThrow() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + + assertThatThrownBy(() -> VectorStoreChatMemoryAdvisor.builder(vectorStore).conversationId(" ").build()) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("defaultConversationId cannot be null or empty"); + } + + @Test + void whenBuilderWithValidConversationIdThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + + VectorStoreChatMemoryAdvisor advisor = VectorStoreChatMemoryAdvisor.builder(vectorStore) + .conversationId("valid-id") + .build(); + + assertThat(advisor).isNotNull(); + } + + @Test + void whenBuilderWithValidTopKThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + + VectorStoreChatMemoryAdvisor advisor = VectorStoreChatMemoryAdvisor.builder(vectorStore) + .defaultTopK(10) + .build(); + + assertThat(advisor).isNotNull(); + } + + @Test + void whenBuilderWithMinimumTopKThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + + VectorStoreChatMemoryAdvisor advisor = VectorStoreChatMemoryAdvisor.builder(vectorStore).defaultTopK(1).build(); + + assertThat(advisor).isNotNull(); + } + + @Test + void whenBuilderWithLargeTopKThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + + VectorStoreChatMemoryAdvisor advisor = VectorStoreChatMemoryAdvisor.builder(vectorStore) + .defaultTopK(1000) + .build(); + + assertThat(advisor).isNotNull(); + } + + @Test + void whenBuilderCalledMultipleTimesWithSameVectorStoreThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + + VectorStoreChatMemoryAdvisor advisor1 = VectorStoreChatMemoryAdvisor.builder(vectorStore).build(); + VectorStoreChatMemoryAdvisor advisor2 = VectorStoreChatMemoryAdvisor.builder(vectorStore).build(); + + assertThat(advisor1).isNotNull(); + assertThat(advisor2).isNotNull(); + assertThat(advisor1).isNotSameAs(advisor2); + } + + @Test + void whenBuilderWithCustomSchedulerThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + Scheduler customScheduler = Mockito.mock(Scheduler.class); + + VectorStoreChatMemoryAdvisor advisor = VectorStoreChatMemoryAdvisor.builder(vectorStore) + .scheduler(customScheduler) + .build(); + + assertThat(advisor).isNotNull(); + } + + @Test + void whenBuilderWithCustomSystemPromptTemplateThenSuccess() { + VectorStore vectorStore = Mockito.mock(VectorStore.class); + PromptTemplate customTemplate = Mockito.mock(PromptTemplate.class); + + VectorStoreChatMemoryAdvisor advisor = VectorStoreChatMemoryAdvisor.builder(vectorStore) + .systemPromptTemplate(customTemplate) + .build(); + + assertThat(advisor).isNotNull(); + } + }