Skip to content

Commit e1288a9

Browse files
committed
test: Add comprehensive test coverage for Azure OpenAI chat and embedding options
Enhances test coverage for AzureOpenAiChatOptions and AzureOpenAiEmbeddingModel with edge cases and robustness testing Co-authored-by: Oleksandr Klymenko <[email protected]> Signed-off-by: Oleksandr Klymenko <[email protected]>
1 parent 27b09fe commit e1288a9

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureEmbeddingsOptionsTests.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.ai.azure.openai;
1818

19+
import java.util.ArrayList;
1920
import java.util.Arrays;
2021
import java.util.Collections;
2122
import java.util.List;
@@ -158,4 +159,56 @@ public void shouldHandleConcurrentRequests() {
158159
assertThat(options2.getUser()).isEqualTo("USER2");
159160
}
160161

162+
@Test
163+
public void shouldHandleVeryLargeInputList() {
164+
// Test with a large number of inputs to verify performance and memory handling
165+
List<String> largeInputList = Collections.nCopies(1000, "Test input text");
166+
var requestOptions = client.toEmbeddingOptions(new EmbeddingRequest(largeInputList, null));
167+
168+
assertThat(requestOptions.getInput()).hasSize(1000);
169+
assertThat(requestOptions.getModel()).isEqualTo("DEFAULT_MODEL");
170+
assertThat(requestOptions.getUser()).isEqualTo("USER_TEST");
171+
}
172+
173+
@Test
174+
public void shouldHandleEmptyStringInputs() {
175+
List<String> inputsWithEmpty = Arrays.asList("", "Valid text", "", "Another valid text");
176+
var requestOptions = client.toEmbeddingOptions(new EmbeddingRequest(inputsWithEmpty, null));
177+
178+
assertThat(requestOptions.getInput()).hasSize(4);
179+
assertThat(requestOptions.getInput()).containsExactly("", "Valid text", "", "Another valid text");
180+
}
181+
182+
@Test
183+
public void shouldHandleDifferentClientConfigurations() {
184+
var clientWithDifferentDefaults = new AzureOpenAiEmbeddingModel(mockClient, MetadataMode.EMBED,
185+
AzureOpenAiEmbeddingOptions.builder().deploymentName("DIFFERENT_DEFAULT").build());
186+
187+
var requestOptions = clientWithDifferentDefaults
188+
.toEmbeddingOptions(new EmbeddingRequest(List.of("Test content"), null));
189+
190+
assertThat(requestOptions.getModel()).isEqualTo("DIFFERENT_DEFAULT");
191+
assertThat(requestOptions.getUser()).isNull(); // No default user set
192+
}
193+
194+
@Test
195+
public void shouldHandleWhitespaceOnlyInputs() {
196+
List<String> whitespaceInputs = Arrays.asList(" ", "\t\t", "\n\n", " valid text ");
197+
var requestOptions = client.toEmbeddingOptions(new EmbeddingRequest(whitespaceInputs, null));
198+
199+
assertThat(requestOptions.getInput()).hasSize(4);
200+
assertThat(requestOptions.getInput()).containsExactlyElementsOf(whitespaceInputs);
201+
}
202+
203+
@Test
204+
public void shouldValidateInputListIsNotModified() {
205+
List<String> originalInputs = Arrays.asList("Input 1", "Input 2", "Input 3");
206+
List<String> inputsCopy = new ArrayList<>(originalInputs);
207+
208+
client.toEmbeddingOptions(new EmbeddingRequest(inputsCopy, null));
209+
210+
// Verify original list wasn't modified
211+
assertThat(inputsCopy).isEqualTo(originalInputs);
212+
}
213+
161214
}

models/spring-ai-azure-openai/src/test/java/org/springframework/ai/azure/openai/AzureOpenAiChatOptionsTests.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,49 @@ void testDefaultValues() {
195195
assertThat(options.getModel()).isNull();
196196
}
197197

198+
@Test
199+
void testModelAndDeploymentNameRelationship() {
200+
AzureOpenAiChatOptions options = new AzureOpenAiChatOptions();
201+
202+
// Test setting deployment name first
203+
options.setDeploymentName("deployment-1");
204+
assertThat(options.getDeploymentName()).isEqualTo("deployment-1");
205+
assertThat(options.getModel()).isEqualTo("deployment-1");
206+
207+
// Test setting model overwrites deployment name
208+
options.setModel("model-1");
209+
assertThat(options.getDeploymentName()).isEqualTo("model-1");
210+
assertThat(options.getModel()).isEqualTo("model-1");
211+
}
212+
213+
@Test
214+
void testResponseFormatVariations() {
215+
// Test with JSON response format
216+
AzureOpenAiResponseFormat jsonFormat = AzureOpenAiResponseFormat.builder()
217+
.type(AzureOpenAiResponseFormat.Type.JSON_OBJECT)
218+
.build();
219+
220+
AzureOpenAiChatOptions options = AzureOpenAiChatOptions.builder().responseFormat(jsonFormat).build();
221+
222+
assertThat(options.getResponseFormat()).isEqualTo(jsonFormat);
223+
assertThat(options.getResponseFormat().getType()).isEqualTo(AzureOpenAiResponseFormat.Type.JSON_OBJECT);
224+
}
225+
226+
@Test
227+
void testEnhancementsConfiguration() {
228+
AzureChatEnhancementConfiguration enhancements = new AzureChatEnhancementConfiguration();
229+
AzureChatOCREnhancementConfiguration ocrConfig = new AzureChatOCREnhancementConfiguration(false);
230+
AzureChatGroundingEnhancementConfiguration groundingConfig = new AzureChatGroundingEnhancementConfiguration(
231+
false);
232+
233+
enhancements.setOcr(ocrConfig);
234+
enhancements.setGrounding(groundingConfig);
235+
236+
AzureOpenAiChatOptions options = AzureOpenAiChatOptions.builder().enhancements(enhancements).build();
237+
238+
assertThat(options.getEnhancements()).isEqualTo(enhancements);
239+
assertThat(options.getEnhancements().getOcr()).isEqualTo(ocrConfig);
240+
assertThat(options.getEnhancements().getGrounding()).isEqualTo(groundingConfig);
241+
}
242+
198243
}

0 commit comments

Comments
 (0)