diff --git a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureEmbeddingsOptionsTests.java b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureEmbeddingsOptionsTests.java index 7bf6028ae08..99107f1736e 100644 --- a/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureEmbeddingsOptionsTests.java +++ b/models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureEmbeddingsOptionsTests.java @@ -30,6 +30,7 @@ import org.springframework.ai.embedding.EmbeddingRequest; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; /** * @author Christian Tzolov @@ -202,4 +203,41 @@ public void shouldValidateInputListIsNotModified() { assertThat(inputsCopy).isEqualTo(originalInputs); } + @Test + public void shouldHandleNullInputList() { + var requestOptions = this.client.toEmbeddingOptions(new EmbeddingRequest(null, null)); + assertThat(requestOptions.getInput()).isNull(); + } + + @Test + public void shouldHandleNullEmbeddingRequest() { + assertThatThrownBy(() -> this.client.toEmbeddingOptions(null)).isInstanceOf(NullPointerException.class); + } + + @Test + public void shouldHandlePartialOptionsOverride() { + var partialOptions = AzureOpenAiEmbeddingOptions.builder() + .deploymentName("CUSTOM_MODEL") + // user is not set, should use default + .build(); + + var requestOptions = this.client + .toEmbeddingOptions(new EmbeddingRequest(List.of("Test content"), partialOptions)); + + assertThat(requestOptions.getModel()).isEqualTo("CUSTOM_MODEL"); + assertThat(requestOptions.getUser()).isEqualTo("USER_TEST"); // from default + } + + @Test + public void shouldHandleDefaultOptionsOnlyClient() { + var clientWithMinimalDefaults = new AzureOpenAiEmbeddingModel(this.mockClient, MetadataMode.EMBED, + AzureOpenAiEmbeddingOptions.builder().deploymentName("MINIMAL_MODEL").build()); + + var requestOptions = clientWithMinimalDefaults + .toEmbeddingOptions(new EmbeddingRequest(List.of("Test content"), null)); + + assertThat(requestOptions.getModel()).isEqualTo("MINIMAL_MODEL"); + assertThat(requestOptions.getUser()).isNull(); + } + } diff --git a/models/spring-ai-google-genai/src/test/java/org/springframework/ai/google/genai/aot/GoogleGenAiRuntimeHintsTests.java b/models/spring-ai-google-genai/src/test/java/org/springframework/ai/google/genai/aot/GoogleGenAiRuntimeHintsTests.java index 4552ee78c7e..a5a562acbab 100644 --- a/models/spring-ai-google-genai/src/test/java/org/springframework/ai/google/genai/aot/GoogleGenAiRuntimeHintsTests.java +++ b/models/spring-ai-google-genai/src/test/java/org/springframework/ai/google/genai/aot/GoogleGenAiRuntimeHintsTests.java @@ -54,4 +54,32 @@ void registerHints() { assertThat(registeredTypes.contains(TypeReference.of(GoogleGenAiChatOptions.class))).isTrue(); } + @Test + void registerHintsWithNullClassLoader() { + RuntimeHints runtimeHints = new RuntimeHints(); + GoogleGenAiRuntimeHints googleGenAiRuntimeHints = new GoogleGenAiRuntimeHints(); + + googleGenAiRuntimeHints.registerHints(runtimeHints, null); + + assertThat(runtimeHints.reflection().typeHints().count()).isGreaterThan(0); + } + + @Test + void verifyNoProxyHintsAreRegistered() { + RuntimeHints runtimeHints = new RuntimeHints(); + GoogleGenAiRuntimeHints googleGenAiRuntimeHints = new GoogleGenAiRuntimeHints(); + googleGenAiRuntimeHints.registerHints(runtimeHints, null); + + assertThat(runtimeHints.proxies().jdkProxyHints().count()).isEqualTo(0); + } + + @Test + void verifyNoSerializationHintsAreRegistered() { + RuntimeHints runtimeHints = new RuntimeHints(); + GoogleGenAiRuntimeHints googleGenAiRuntimeHints = new GoogleGenAiRuntimeHints(); + googleGenAiRuntimeHints.registerHints(runtimeHints, null); + + assertThat(runtimeHints.serialization().javaSerializationHints().count()).isEqualTo(0); + } + }