Copy tests for multipart request builder

See gh-33229
This commit is contained in:
Stéphane Nicoll 2024-07-18 12:08:07 +02:00
parent 6590ab6bf9
commit 89453905cb
1 changed files with 53 additions and 1 deletions

View File

@ -17,13 +17,18 @@
package org.springframework.test.web.servlet.request;
import jakarta.servlet.ServletContext;
import jakarta.servlet.http.Part;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.mock.web.MockMultipartHttpServletRequest;
import org.springframework.mock.web.MockPart;
import org.springframework.mock.web.MockServletContext;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.assertj.core.api.Assertions.assertThat;
/**
@ -35,13 +40,60 @@ public class AbstractMockMultipartHttpServletRequestBuilderTests {
private final ServletContext servletContext = new MockServletContext();
@Test // gh-26166
void addFileAndParts() throws Exception {
MockMultipartHttpServletRequest mockRequest =
(MockMultipartHttpServletRequest) createBuilder("/upload")
.file(new MockMultipartFile("file", "test.txt", "text/plain", "Test".getBytes(UTF_8)))
.part(new MockPart("name", "value".getBytes(UTF_8)))
.buildRequest(new MockServletContext());
assertThat(mockRequest.getFileMap()).containsOnlyKeys("file");
assertThat(mockRequest.getParameterMap()).containsOnlyKeys("name");
assertThat(mockRequest.getParts()).extracting(Part::getName).containsExactly("name");
}
@Test // gh-26261, gh-26400
void addFileWithoutFilename() throws Exception {
MockPart jsonPart = new MockPart("data", "{\"node\":\"node\"}".getBytes(UTF_8));
jsonPart.getHeaders().setContentType(MediaType.APPLICATION_JSON);
MockMultipartHttpServletRequest mockRequest =
(MockMultipartHttpServletRequest) createBuilder("/upload")
.file(new MockMultipartFile("file", "Test".getBytes(UTF_8)))
.part(jsonPart)
.buildRequest(new MockServletContext());
assertThat(mockRequest.getFileMap()).containsOnlyKeys("file");
assertThat(mockRequest.getParameterMap()).hasSize(1);
assertThat(mockRequest.getParameter("data")).isEqualTo("{\"node\":\"node\"}");
assertThat(mockRequest.getParts()).extracting(Part::getName).containsExactly("data");
}
@Test
void mergeAndBuild() {
MockHttpServletRequestBuilder parent = new MockHttpServletRequestBuilder(HttpMethod.GET).uri("/");
parent.characterEncoding("UTF-8");
Object result = createBuilder("/fileUpload").merge(parent);
assertThat(result).isNotNull();
assertThat(result.getClass()).isEqualTo(TestRequestBuilder.class);
TestRequestBuilder builder = (TestRequestBuilder) result;
MockHttpServletRequest request = builder.buildRequest(new MockServletContext());
assertThat(request.getCharacterEncoding()).isEqualTo("UTF-8");
}
@Test
void builderSetsRequestContentType() {
MockHttpServletRequest request = buildRequest(new TestRequestBuilder(HttpMethod.PUT).uri("/upload"));
MockHttpServletRequest request = buildRequest(createBuilder("/upload"));
assertThat(request.getContentType()).isEqualTo(MediaType.MULTIPART_FORM_DATA_VALUE);
}
private TestRequestBuilder createBuilder(String uri) {
return new TestRequestBuilder(HttpMethod.POST).uri(uri);
}
private MockHttpServletRequest buildRequest(AbstractMockHttpServletRequestBuilder<?> builder) {
return builder.buildRequest(this.servletContext);