Skip to content

Commit 8945390

Browse files
committed
Copy tests for multipart request builder
See gh-33229
1 parent 6590ab6 commit 8945390

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

spring-test/src/test/java/org/springframework/test/web/servlet/request/AbstractMockMultipartHttpServletRequestBuilderTests.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,18 @@
1717
package org.springframework.test.web.servlet.request;
1818

1919
import jakarta.servlet.ServletContext;
20+
import jakarta.servlet.http.Part;
2021
import org.junit.jupiter.api.Test;
2122

2223
import org.springframework.http.HttpMethod;
2324
import org.springframework.http.MediaType;
2425
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;
2529
import org.springframework.mock.web.MockServletContext;
2630

31+
import static java.nio.charset.StandardCharsets.UTF_8;
2732
import static org.assertj.core.api.Assertions.assertThat;
2833

2934
/**
@@ -35,13 +40,60 @@ public class AbstractMockMultipartHttpServletRequestBuilderTests {
3540

3641
private final ServletContext servletContext = new MockServletContext();
3742

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+
3887

3988
@Test
4089
void builderSetsRequestContentType() {
41-
MockHttpServletRequest request = buildRequest(new TestRequestBuilder(HttpMethod.PUT).uri("/upload"));
90+
MockHttpServletRequest request = buildRequest(createBuilder("/upload"));
4291
assertThat(request.getContentType()).isEqualTo(MediaType.MULTIPART_FORM_DATA_VALUE);
4392
}
4493

94+
private TestRequestBuilder createBuilder(String uri) {
95+
return new TestRequestBuilder(HttpMethod.POST).uri(uri);
96+
}
4597

4698
private MockHttpServletRequest buildRequest(AbstractMockHttpServletRequestBuilder<?> builder) {
4799
return builder.buildRequest(this.servletContext);

0 commit comments

Comments
 (0)