Skip to content

Commit 3f79373

Browse files
alxkmericbottard
authored andcommitted
Add edge case and validation tests for MimeTypeDetector
Add support for URLs with query parameters in MimeTypeDetector Signed-off-by: Oleksandr Klymenko <[email protected]> Signed-off-by: Eric Bottard <[email protected]>
1 parent 369db3c commit 3f79373

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/MimeTypeDetector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ public abstract class MimeTypeDetector {
5959
static final Map<String, MimeType> GEMINI_MIME_TYPES = new HashMap<>();
6060

6161
public static MimeType getMimeType(URL url) {
62-
return getMimeType(url.getFile());
62+
return getMimeType(url.getPath());
6363
}
6464

6565
public static MimeType getMimeType(URI uri) {
66-
return getMimeType(uri.toString());
66+
return getMimeType(uri.getPath());
6767
}
6868

6969
public static MimeType getMimeType(File file) {

models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/MimeTypeDetectorTests.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,17 @@
2222
import java.nio.file.Path;
2323
import java.util.stream.Stream;
2424

25+
import org.junit.jupiter.api.Test;
2526
import org.junit.jupiter.params.ParameterizedTest;
2627
import org.junit.jupiter.params.provider.Arguments;
2728
import org.junit.jupiter.params.provider.MethodSource;
2829

2930
import org.springframework.core.io.PathResource;
3031
import org.springframework.util.MimeType;
32+
import org.springframework.util.MimeTypeUtils;
3133

3234
import static org.assertj.core.api.Assertions.assertThat;
35+
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
3336

3437
/**
3538
* @author YunKui Lu
@@ -90,4 +93,27 @@ void getMimeTypeByString(String extension, MimeType expectedMimeType) {
9093
assertThat(mimeType).isEqualTo(expectedMimeType);
9194
}
9295

96+
@Test
97+
void getMimeTypeWithEmptyString() {
98+
assertThatThrownBy(() -> MimeTypeDetector.getMimeType("")).isInstanceOf(IllegalArgumentException.class)
99+
.hasMessageContaining("Unable to detect the MIME type");
100+
}
101+
102+
@Test
103+
void getMimeTypeWithMultipleDots() {
104+
// Should use the last extension
105+
MimeType expectedPng = MimeTypeUtils.IMAGE_PNG;
106+
assertThat(MimeTypeDetector.getMimeType("test.backup.png")).isEqualTo(expectedPng);
107+
assertThat(MimeTypeDetector.getMimeType(new File("archive.tar.gz.png"))).isEqualTo(expectedPng);
108+
}
109+
110+
@Test
111+
void getMimeTypeWithQueryParameters() throws MalformedURLException {
112+
MimeType expectedJpg = MimeTypeUtils.IMAGE_JPEG;
113+
URI uri = URI.create("https://example.com/image.jpg?version=1.2&cache=false");
114+
115+
assertThat(MimeTypeDetector.getMimeType(uri)).isEqualTo(expectedJpg);
116+
assertThat(MimeTypeDetector.getMimeType(uri.toURL())).isEqualTo(expectedJpg);
117+
}
118+
93119
}

0 commit comments

Comments
 (0)