Skip to content

Commit 372ac68

Browse files
committed
test: Add comprehensive media content tests for MessageTypeContentTests
Added comprehensive test coverage for various media content scenarios in chat message handling, focusing on edge cases and mixed content types. Co-authored-by: Oleksandr Klymenko <[email protected]> Signed-off-by: Alex Klimenko <[email protected]>
1 parent f14bf19 commit 372ac68

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/MessageTypeContentTests.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,4 +350,60 @@ public void userMessageWithMultipleImageFormats() {
350350
}
351351
}
352352

353+
@Test
354+
public void userMessageWithOnlyFileMedia() {
355+
given(this.openAiApi.chatCompletionEntity(this.pomptCaptor.capture(), this.headersCaptor.capture()))
356+
.willReturn(Mockito.mock(ResponseEntity.class));
357+
358+
byte[] pdfData = "%PDF-1.7".getBytes(StandardCharsets.UTF_8);
359+
Media pdfMedia = Media.builder()
360+
.mimeType(MimeType.valueOf("application/pdf"))
361+
.data(new ByteArrayResource(pdfData))
362+
.build();
363+
364+
this.chatModel.call(new Prompt(
365+
List.of(UserMessage.builder().text("Analyze this document").media(List.of(pdfMedia)).build())));
366+
367+
ChatCompletionRequest request = this.pomptCaptor.getValue();
368+
assertThat(request.messages()).hasSize(1);
369+
var userMessage = request.messages().get(0);
370+
assertThat(userMessage.rawContent()).isInstanceOf(List.class);
371+
372+
@SuppressWarnings("unchecked")
373+
List<Map<String, Object>> mediaContents = (List<Map<String, Object>>) userMessage.rawContent();
374+
assertThat(mediaContents).hasSize(2); // text + file
375+
376+
// Text content
377+
Map<String, Object> textContent = mediaContents.get(0);
378+
assertThat(textContent.get("type")).isEqualTo("text");
379+
assertThat(textContent.get("text")).isEqualTo("Analyze this document");
380+
381+
// File content
382+
Map<String, Object> fileContent = mediaContents.get(1);
383+
assertThat(fileContent.get("type")).isEqualTo("file");
384+
assertThat(fileContent).containsKey("file");
385+
}
386+
387+
@Test
388+
public void systemMessageWithMultipleMessages() {
389+
given(this.openAiApi.chatCompletionEntity(this.pomptCaptor.capture(), this.headersCaptor.capture()))
390+
.willReturn(Mockito.mock(ResponseEntity.class));
391+
392+
this.chatModel.call(new Prompt(List.of(new SystemMessage("First system message"),
393+
new SystemMessage("Second system message"), new UserMessage("User query"))));
394+
395+
ChatCompletionRequest request = this.pomptCaptor.getValue();
396+
assertThat(request.messages()).hasSize(3);
397+
398+
// All messages should have string content
399+
for (int i = 0; i < 3; i++) {
400+
var message = request.messages().get(i);
401+
assertThat(message.rawContent()).isInstanceOf(String.class);
402+
}
403+
404+
assertThat(request.messages().get(0).content()).isEqualTo("First system message");
405+
assertThat(request.messages().get(1).content()).isEqualTo("Second system message");
406+
assertThat(request.messages().get(2).content()).isEqualTo("User query");
407+
}
408+
353409
}

0 commit comments

Comments
 (0)