Test form submissions
See gh-31361
This commit is contained in:
@@ -50,6 +50,8 @@ import org.springframework.http.client.JettyClientHttpRequestFactory;
|
||||
import org.springframework.http.client.ReactorNettyClientRequestFactory;
|
||||
import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.testfixture.xml.Pojo;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -484,6 +486,50 @@ class RestClientIntegrationTests {
|
||||
});
|
||||
}
|
||||
|
||||
@ParameterizedRestClientTest // gh-31361
|
||||
public void postForm(ClientHttpRequestFactory requestFactory) {
|
||||
startServer(requestFactory);
|
||||
|
||||
prepareResponse(response -> response.setResponseCode(200));
|
||||
|
||||
MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
|
||||
formData.add("foo", "bar");
|
||||
formData.add("baz", "qux");
|
||||
|
||||
ResponseEntity<Void> result = this.restClient.post()
|
||||
.uri("/form")
|
||||
.contentType(MediaType.MULTIPART_FORM_DATA)
|
||||
.body(formData)
|
||||
.retrieve()
|
||||
.toBodilessEntity();
|
||||
|
||||
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
expectRequestCount(1);
|
||||
expectRequest(request -> {
|
||||
assertThat(request.getPath()).isEqualTo("/form");
|
||||
String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE);
|
||||
assertThat(contentType).startsWith(MediaType.MULTIPART_FORM_DATA_VALUE);
|
||||
String[] lines = request.getBody().readUtf8().split("\r\n");
|
||||
assertThat(lines).hasSize(13);
|
||||
assertThat(lines[0]).startsWith("--"); // boundary
|
||||
assertThat(lines[1]).isEqualTo("Content-Disposition: form-data; name=\"foo\"");
|
||||
assertThat(lines[2]).isEqualTo("Content-Type: text/plain;charset=UTF-8");
|
||||
assertThat(lines[3]).isEqualTo("Content-Length: 3");
|
||||
assertThat(lines[4]).isEmpty();
|
||||
assertThat(lines[5]).isEqualTo("bar");
|
||||
assertThat(lines[6]).startsWith("--"); // boundary
|
||||
assertThat(lines[7]).isEqualTo("Content-Disposition: form-data; name=\"baz\"");
|
||||
assertThat(lines[8]).isEqualTo("Content-Type: text/plain;charset=UTF-8");
|
||||
assertThat(lines[9]).isEqualTo("Content-Length: 3");
|
||||
assertThat(lines[10]).isEmpty();
|
||||
assertThat(lines[11]).isEqualTo("qux");
|
||||
assertThat(lines[12]).startsWith("--"); // boundary
|
||||
assertThat(lines[12]).endsWith("--"); // boundary
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ParameterizedRestClientTest
|
||||
void statusHandler(ClientHttpRequestFactory requestFactory) {
|
||||
startServer(requestFactory);
|
||||
|
||||
Reference in New Issue
Block a user