17
17
package org .springframework .test .web .servlet .request ;
18
18
19
19
import jakarta .servlet .ServletContext ;
20
+ import jakarta .servlet .http .Part ;
20
21
import org .junit .jupiter .api .Test ;
21
22
22
23
import org .springframework .http .HttpMethod ;
23
24
import org .springframework .http .MediaType ;
24
25
import org .springframework .mock .web .MockHttpServletRequest ;
26
+ import org .springframework .mock .web .MockMultipartFile ;
27
+ import org .springframework .mock .web .MockMultipartHttpServletRequest ;
28
+ import org .springframework .mock .web .MockPart ;
25
29
import org .springframework .mock .web .MockServletContext ;
26
30
31
+ import static java .nio .charset .StandardCharsets .UTF_8 ;
27
32
import static org .assertj .core .api .Assertions .assertThat ;
28
33
29
34
/**
@@ -35,13 +40,60 @@ public class AbstractMockMultipartHttpServletRequestBuilderTests {
35
40
36
41
private final ServletContext servletContext = new MockServletContext ();
37
42
43
+ @ Test // gh-26166
44
+ void addFileAndParts () throws Exception {
45
+ MockMultipartHttpServletRequest mockRequest =
46
+ (MockMultipartHttpServletRequest ) createBuilder ("/upload" )
47
+ .file (new MockMultipartFile ("file" , "test.txt" , "text/plain" , "Test" .getBytes (UTF_8 )))
48
+ .part (new MockPart ("name" , "value" .getBytes (UTF_8 )))
49
+ .buildRequest (new MockServletContext ());
50
+
51
+ assertThat (mockRequest .getFileMap ()).containsOnlyKeys ("file" );
52
+ assertThat (mockRequest .getParameterMap ()).containsOnlyKeys ("name" );
53
+ assertThat (mockRequest .getParts ()).extracting (Part ::getName ).containsExactly ("name" );
54
+ }
55
+
56
+ @ Test // gh-26261, gh-26400
57
+ void addFileWithoutFilename () throws Exception {
58
+ MockPart jsonPart = new MockPart ("data" , "{\" node\" :\" node\" }" .getBytes (UTF_8 ));
59
+ jsonPart .getHeaders ().setContentType (MediaType .APPLICATION_JSON );
60
+
61
+ MockMultipartHttpServletRequest mockRequest =
62
+ (MockMultipartHttpServletRequest ) createBuilder ("/upload" )
63
+ .file (new MockMultipartFile ("file" , "Test" .getBytes (UTF_8 )))
64
+ .part (jsonPart )
65
+ .buildRequest (new MockServletContext ());
66
+
67
+ assertThat (mockRequest .getFileMap ()).containsOnlyKeys ("file" );
68
+ assertThat (mockRequest .getParameterMap ()).hasSize (1 );
69
+ assertThat (mockRequest .getParameter ("data" )).isEqualTo ("{\" node\" :\" node\" }" );
70
+ assertThat (mockRequest .getParts ()).extracting (Part ::getName ).containsExactly ("data" );
71
+ }
72
+
73
+ @ Test
74
+ void mergeAndBuild () {
75
+ MockHttpServletRequestBuilder parent = new MockHttpServletRequestBuilder (HttpMethod .GET ).uri ("/" );
76
+ parent .characterEncoding ("UTF-8" );
77
+ Object result = createBuilder ("/fileUpload" ).merge (parent );
78
+
79
+ assertThat (result ).isNotNull ();
80
+ assertThat (result .getClass ()).isEqualTo (TestRequestBuilder .class );
81
+
82
+ TestRequestBuilder builder = (TestRequestBuilder ) result ;
83
+ MockHttpServletRequest request = builder .buildRequest (new MockServletContext ());
84
+ assertThat (request .getCharacterEncoding ()).isEqualTo ("UTF-8" );
85
+ }
86
+
38
87
39
88
@ Test
40
89
void builderSetsRequestContentType () {
41
- MockHttpServletRequest request = buildRequest (new TestRequestBuilder ( HttpMethod . PUT ). uri ("/upload" ));
90
+ MockHttpServletRequest request = buildRequest (createBuilder ("/upload" ));
42
91
assertThat (request .getContentType ()).isEqualTo (MediaType .MULTIPART_FORM_DATA_VALUE );
43
92
}
44
93
94
+ private TestRequestBuilder createBuilder (String uri ) {
95
+ return new TestRequestBuilder (HttpMethod .POST ).uri (uri );
96
+ }
45
97
46
98
private MockHttpServletRequest buildRequest (AbstractMockHttpServletRequestBuilder <?> builder ) {
47
99
return builder .buildRequest (this .servletContext );
0 commit comments