private String getUrl(OperationRequest request) { Parameters uniqueParameters = request.getParameters() .getUniqueParameters(request.getUri()); if (!uniqueParameters.isEmpty() && includeParametersInUri(request)) { return String.format("'%s%s%s'", request.getUri(), StringUtils.hasText(request.getUri().getRawQuery()) ? "&" : "?", uniqueParameters.toQueryString()); } return String.format("'%s'", request.getUri()); }
@Test public void getRequestWithQueryStringPopulatesParameters() throws Exception { OperationRequest request = createOperationRequest( MockMvcRequestBuilders.get("/foo?a=alpha&b=bravo")); assertThat(request.getUri()) .isEqualTo(URI.create("http://localhost/foo?a=alpha&b=bravo")); assertThat(request.getParameters().size()).isEqualTo(2); assertThat(request.getParameters()).containsEntry("a", Arrays.asList("alpha")); assertThat(request.getParameters()).containsEntry("b", Arrays.asList("bravo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); }
@Test public void requestWithContextPath() throws Exception { OperationRequest request = createOperationRequest( MockMvcRequestBuilders.get("/foo/bar").contextPath("/foo")); assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo/bar")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); }
@Test public void requestUriQueryIsPreserved() { this.preprocessor.removePort(); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://api.example.com:12345?foo=bar")); assertThat(processed.getUri()) .isEqualTo(URI.create("http://api.example.com?foo=bar")); }
@Test public void modifiedUriDoesNotGetDoubleEncoded() { this.preprocessor.scheme("https"); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://localhost:12345?foo=%7B%7D")); assertThat(processed.getUri()) .isEqualTo(URI.create("https://localhost:12345?foo=%7B%7D")); }
@Test public void requestUriPortCanBeModified() { this.preprocessor.port(23456); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://api.example.com:12345")); assertThat(processed.getUri()) .isEqualTo(URI.create("http://api.example.com:23456")); assertThat(processed.getHeaders().getFirst(HttpHeaders.HOST)) .isEqualTo("api.example.com:23456"); }
@Test public void requestUriAnchorIsPreserved() { this.preprocessor.removePort(); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://api.example.com:12345#foo")); assertThat(processed.getUri()) .isEqualTo(URI.create("http://api.example.com#foo")); }
@Test public void modifiedUriDoesNotGetDoubleEncoded() { this.preprocessor.scheme("https"); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://localhost:12345?foo=%7B%7D")); assertThat(processed.getUri()) .isEqualTo(URI.create("https://localhost:12345?foo=%7B%7D")); }
@Test public void requestUriSchemeCanBeModified() { this.preprocessor.scheme("https"); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://localhost:12345")); assertThat(processed.getUri()).isEqualTo(URI.create("https://localhost:12345")); }
@Test public void requestUriPortCanBeModified() { this.preprocessor.port(23456); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://api.example.com:12345")); assertThat(processed.getUri()) .isEqualTo(URI.create("http://api.example.com:23456")); assertThat(processed.getHeaders().getFirst(HttpHeaders.HOST)) .isEqualTo("api.example.com:23456"); }
@Test public void requestWithHeaders() throws Exception { OperationRequest request = createOperationRequest(MockMvcRequestBuilders .get("/foo").header("a", "alpha", "apple").header("b", "bravo")); assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); assertThat(request.getHeaders()).containsEntry("a", Arrays.asList("alpha", "apple")); assertThat(request.getHeaders()).containsEntry("b", Arrays.asList("bravo")); }
@Test public void getRequestWithParametersProducesUriWithQueryString() throws Exception { OperationRequest request = createOperationRequest(MockMvcRequestBuilders .get("/foo").param("a", "alpha", "apple").param("b", "br&vo")); assertThat(request.getUri()) .isEqualTo(URI.create("http://localhost/foo?a=alpha&a=apple&b=br%26vo")); assertThat(request.getParameters().size()).isEqualTo(2); assertThat(request.getParameters()).containsEntry("a", Arrays.asList("alpha", "apple")); assertThat(request.getParameters()).containsEntry("b", Arrays.asList("br&vo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); }
@Test public void requestUriPortCanBeRemoved() { this.preprocessor.removePort(); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://api.example.com:12345")); assertThat(processed.getUri()).isEqualTo(URI.create("http://api.example.com")); assertThat(processed.getHeaders().getFirst(HttpHeaders.HOST)) .isEqualTo("api.example.com"); }
@Test public void requestUriAnchorIsPreserved() { this.preprocessor.removePort(); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://api.example.com:12345#foo")); assertThat(processed.getUri()) .isEqualTo(URI.create("http://api.example.com#foo")); }
@Test public void requestUriPathIsPreserved() { this.preprocessor.removePort(); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://api.example.com:12345/foo/bar")); assertThat(processed.getUri()) .isEqualTo(URI.create("http://api.example.com/foo/bar")); }
@Test public void httpsRequest() throws Exception { MockHttpServletRequest mockRequest = MockMvcRequestBuilders.get("/foo") .buildRequest(new MockServletContext()); mockRequest.setScheme("https"); mockRequest.setServerPort(443); OperationRequest request = this.factory.convert(mockRequest); assertThat(request.getUri()).isEqualTo(URI.create("https://localhost/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); }
@Test public void httpsRequestWithCustomPort() throws Exception { MockHttpServletRequest mockRequest = MockMvcRequestBuilders.get("/foo") .buildRequest(new MockServletContext()); mockRequest.setScheme("https"); mockRequest.setServerPort(8443); OperationRequest request = this.factory.convert(mockRequest); assertThat(request.getUri()).isEqualTo(URI.create("https://localhost:8443/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); }
@Test public void requestUri() { RequestSpecification requestSpec = RestAssured.given().port(tomcat.getPort()); requestSpec.get("/foo/bar"); OperationRequest request = this.factory .convert((FilterableRequestSpecification) requestSpec); assertThat(request.getUri()).isEqualTo( URI.create("http://localhost:" + tomcat.getPort() + "/foo/bar")); }
@Test public void httpRequest() { ExchangeResult result = WebTestClient .bindToRouterFunction(RouterFunctions.route(GET("/foo"), (req) -> null)) .configureClient().baseUrl("http://localhost").build().get().uri("/foo") .exchange().expectBody().returnResult(); OperationRequest request = this.converter.convert(result); assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); }
@Test public void httpsRequest() { ExchangeResult result = WebTestClient .bindToRouterFunction(RouterFunctions.route(GET("/foo"), (req) -> null)) .configureClient().baseUrl("https://localhost").build().get().uri("/foo") .exchange().expectBody().returnResult(); OperationRequest request = this.converter.convert(result); assertThat(request.getUri()).isEqualTo(URI.create("https://localhost/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); }