11package 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