Skip to content

Commit 47cecbd

Browse files
committed
Added Unit tests
1 parent bf44e60 commit 47cecbd

2 files changed

Lines changed: 171 additions & 5 deletions

File tree

src/main/java/org/example/http/MimeTypeDetector.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,19 +54,24 @@ private MimeTypeDetector() {
5454
* @param filename the name of the file (t.ex., "index.html", "style.css")
5555
* @return the MIME type string (t.ex, "text/html; charset=UTF-8")
5656
*/
57+
58+
5759
public static String detectMimeType(String filename) {
60+
61+
String octet = "application/octet-stream";
62+
5863
if (filename == null || filename.isEmpty()) {
59-
return "application/octet-stream";
64+
return octet;
6065
}
6166

6267
// Find the last dot to get extension
6368
int lastDot = filename.lastIndexOf('.');
6469
if (lastDot == -1 || lastDot == filename.length() - 1) {
6570
// No extension or dot at end
66-
return "application/octet-stream";
71+
return octet;
6772
}
6873

6974
String extension = filename.substring(lastDot).toLowerCase();
70-
return MIME_TYPES.getOrDefault(extension, "application/octet-stream");
75+
return MIME_TYPES.getOrDefault(extension, octet);
7176
}
7277
}
Lines changed: 163 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,165 @@
11
package org.example.http;
22

3-
public class MimeTypeDetectorTest {
4-
}
3+
import org.junit.jupiter.api.DisplayName;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.params.ParameterizedTest;
6+
import org.junit.jupiter.params.provider.CsvSource;
7+
8+
import static org.assertj.core.api.Assertions.*;
9+
10+
class MimeTypeDetectorTest {
11+
12+
@Test
13+
@DisplayName("Should detect HTML files")
14+
void detectMimeType_html() {
15+
assertThat(MimeTypeDetector.detectMimeType("index.html"))
16+
.isEqualTo("text/html; charset=UTF-8");
17+
18+
assertThat(MimeTypeDetector.detectMimeType("page.htm"))
19+
.isEqualTo("text/html; charset=UTF-8");
20+
}
21+
22+
@Test
23+
@DisplayName("Should detect CSS files")
24+
void detectMimeType_css() {
25+
assertThat(MimeTypeDetector.detectMimeType("style.css"))
26+
.isEqualTo("text/css; charset=UTF-8");
27+
}
28+
29+
@Test
30+
@DisplayName("Should detect JavaScript files")
31+
void detectMimeType_javascript() {
32+
assertThat(MimeTypeDetector.detectMimeType("app.js"))
33+
.isEqualTo("application/javascript; charset=UTF-8");
34+
}
35+
36+
@Test
37+
@DisplayName("Should detect JSON files")
38+
void detectMimeType_json() {
39+
assertThat(MimeTypeDetector.detectMimeType("data.json"))
40+
.isEqualTo("application/json; charset=UTF-8");
41+
}
42+
43+
@Test
44+
@DisplayName("Should detect PNG images")
45+
void detectMimeType_png() {
46+
assertThat(MimeTypeDetector.detectMimeType("logo.png"))
47+
.isEqualTo("image/png");
48+
}
49+
50+
@Test
51+
@DisplayName("Should detect JPEG images with .jpg extension")
52+
void detectMimeType_jpg() {
53+
assertThat(MimeTypeDetector.detectMimeType("photo.jpg"))
54+
.isEqualTo("image/jpeg");
55+
}
56+
57+
@Test
58+
@DisplayName("Should detect JPEG images with .jpeg extension")
59+
void detectMimeType_jpeg() {
60+
assertThat(MimeTypeDetector.detectMimeType("photo.jpeg"))
61+
.isEqualTo("image/jpeg");
62+
}
63+
64+
@Test
65+
@DisplayName("Should detect PDF files")
66+
void detectMimeType_pdf() {
67+
assertThat(MimeTypeDetector.detectMimeType("document.pdf"))
68+
.isEqualTo("application/pdf");
69+
}
70+
71+
@Test
72+
@DisplayName("Should be case-insensitive")
73+
void detectMimeType_caseInsensitive() {
74+
assertThat(MimeTypeDetector.detectMimeType("INDEX.HTML"))
75+
.isEqualTo("text/html; charset=UTF-8");
76+
77+
assertThat(MimeTypeDetector.detectMimeType("Style.CSS"))
78+
.isEqualTo("text/css; charset=UTF-8");
79+
80+
assertThat(MimeTypeDetector.detectMimeType("PHOTO.PNG"))
81+
.isEqualTo("image/png");
82+
}
83+
84+
@Test
85+
@DisplayName("Should return default MIME type for unknown extensions")
86+
void detectMimeType_unknownExtension() {
87+
assertThat(MimeTypeDetector.detectMimeType("file.xyz"))
88+
.isEqualTo("application/octet-stream");
89+
90+
assertThat(MimeTypeDetector.detectMimeType("document.unknown"))
91+
.isEqualTo("application/octet-stream");
92+
}
93+
94+
@Test
95+
@DisplayName("Should handle files without extension")
96+
void detectMimeType_noExtension() {
97+
assertThat(MimeTypeDetector.detectMimeType("README"))
98+
.isEqualTo("application/octet-stream");
99+
100+
assertThat(MimeTypeDetector.detectMimeType("Makefile"))
101+
.isEqualTo("application/octet-stream");
102+
}
103+
104+
@Test
105+
@DisplayName("Should handle null filename")
106+
void detectMimeType_null() {
107+
assertThat(MimeTypeDetector.detectMimeType(null))
108+
.isEqualTo("application/octet-stream");
109+
}
110+
111+
@Test
112+
@DisplayName("Should handle empty filename")
113+
void detectMimeType_empty() {
114+
assertThat(MimeTypeDetector.detectMimeType(""))
115+
.isEqualTo("application/octet-stream");
116+
}
117+
118+
@Test
119+
@DisplayName("Should handle filename ending with dot")
120+
void detectMimeType_endsWithDot() {
121+
assertThat(MimeTypeDetector.detectMimeType("file."))
122+
.isEqualTo("application/octet-stream");
123+
}
124+
125+
@Test
126+
@DisplayName("Should handle path with directories")
127+
void detectMimeType_withPath() {
128+
assertThat(MimeTypeDetector.detectMimeType("/var/www/index.html"))
129+
.isEqualTo("text/html; charset=UTF-8");
130+
131+
assertThat(MimeTypeDetector.detectMimeType("css/styles/main.css"))
132+
.isEqualTo("text/css; charset=UTF-8");
133+
}
134+
135+
@Test
136+
@DisplayName("Should handle multiple dots in filename")
137+
void detectMimeType_multipleDots() {
138+
assertThat(MimeTypeDetector.detectMimeType("jquery.min.js"))
139+
.isEqualTo("application/javascript; charset=UTF-8");
140+
141+
assertThat(MimeTypeDetector.detectMimeType("bootstrap.bundle.min.css"))
142+
.isEqualTo("text/css; charset=UTF-8");
143+
}
144+
145+
// Parametriserad test för många filtyper på en gång
146+
@ParameterizedTest
147+
@CsvSource({
148+
"test.html, text/html; charset=UTF-8",
149+
"style.css, text/css; charset=UTF-8",
150+
"app.js, application/javascript; charset=UTF-8",
151+
"data.json, application/json; charset=UTF-8",
152+
"image.png, image/png",
153+
"photo.jpg, image/jpeg",
154+
"doc.pdf, application/pdf",
155+
"icon.svg, image/svg+xml",
156+
"favicon.ico, image/x-icon",
157+
"video.mp4, video/mp4",
158+
"audio.mp3, audio/mpeg"
159+
})
160+
@DisplayName("Should detect common file types")
161+
void detectMimeType_commonTypes(String filename, String expectedMimeType) {
162+
assertThat(MimeTypeDetector.detectMimeType(filename))
163+
.isEqualTo(expectedMimeType);
164+
}
165+
}

0 commit comments

Comments
 (0)