From b240cc8d29d3c1ed9bbfe7901b1ce733390408a8 Mon Sep 17 00:00:00 2001 From: osvaldjr Date: Thu, 5 Sep 2019 10:48:01 -0300 Subject: [PATCH] Test for plain text body and fix queryparameter attribute name --- .../osvaldjr/domains/TargetRequest.java | 2 +- .../assemblers/StubbyRequestAssembler.java | 22 +++++++++---- .../usecases/RequestTargetUseCase.java | 2 +- .../gateways/http/CustomExceptionHandler.java | 1 + .../gateways/http/TestController.java | 9 +++++ .../StubbyRequestAssemblerTest.java | 33 +++++++++++++++++++ .../usecases/RequestTargetUseCaseTest.java | 10 +++--- src/test/resources/application.yml | 3 +- ...p_plaintext_body_defined_body_request.json | 13 ++++++++ ...ttp_plaintext_body_successful-request.json | 10 ++++++ ...tp_plaintext_body_successful-response.json | 11 +++++++ .../resources/features/integration.feature | 5 +++ src/test/resources/features/security.feature | 2 +- 13 files changed, 107 insertions(+), 16 deletions(-) create mode 100644 src/test/resources/data/integration/http_plaintext_body_defined_body_request.json create mode 100644 src/test/resources/data/integration/mocks/http_plaintext_body_successful-request.json create mode 100644 src/test/resources/data/integration/mocks/http_plaintext_body_successful-response.json diff --git a/src/main/java/io/github/osvaldjr/domains/TargetRequest.java b/src/main/java/io/github/osvaldjr/domains/TargetRequest.java index f4b669a..7facd17 100644 --- a/src/main/java/io/github/osvaldjr/domains/TargetRequest.java +++ b/src/main/java/io/github/osvaldjr/domains/TargetRequest.java @@ -13,5 +13,5 @@ public class TargetRequest { private String url; private T body; private Map headers; - private Map queryParameters; + private Map queryParams; } diff --git a/src/main/java/io/github/osvaldjr/gateways/mock/stubby/assemblers/StubbyRequestAssembler.java b/src/main/java/io/github/osvaldjr/gateways/mock/stubby/assemblers/StubbyRequestAssembler.java index df35353..88b2046 100644 --- a/src/main/java/io/github/osvaldjr/gateways/mock/stubby/assemblers/StubbyRequestAssembler.java +++ b/src/main/java/io/github/osvaldjr/gateways/mock/stubby/assemblers/StubbyRequestAssembler.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Component; import gherkin.deps.com.google.gson.Gson; +import io.github.osvaldjr.domains.StubbyRequest; import io.github.osvaldjr.gateways.mock.stubby.jsons.StubbyJsonRequest; import io.github.osvaldjr.gateways.mock.stubby.jsons.StubbyRequestBody; import io.github.osvaldjr.gateways.mock.stubby.jsons.StubbyResponseBody; @@ -32,12 +33,19 @@ private StubbyResponseBody buildResponseBody(ResponseBody stubbyResponseBody) { } private StubbyRequestBody buildRequest(RequestBody stubbyRequestBody) { - return StubbyRequestBody.builder() - .headers(stubbyRequestBody.getHeaders()) - .json(gson.toJson(stubbyRequestBody.getBody())) - .method(stubbyRequestBody.getMethod()) - .query(stubbyRequestBody.getQueryParams()) - .url(stubbyRequestBody.getUrl()) - .build(); + + StubbyRequestBody.StubbyRequestBodyBuilder builder = + StubbyRequestBody.builder() + .headers(stubbyRequestBody.getHeaders()) + .method(stubbyRequestBody.getMethod()) + .query(stubbyRequestBody.getQueryParams()) + .url(stubbyRequestBody.getUrl()); + if (StubbyRequest.BodyType.RAW == stubbyRequestBody.getBodyType()) { + builder.post(stubbyRequestBody.getBody().toString()); + } else { + builder.json(gson.toJson(stubbyRequestBody.getBody())); + } + + return builder.build(); } } diff --git a/src/main/java/io/github/osvaldjr/usecases/RequestTargetUseCase.java b/src/main/java/io/github/osvaldjr/usecases/RequestTargetUseCase.java index 879f900..c4deb60 100644 --- a/src/main/java/io/github/osvaldjr/usecases/RequestTargetUseCase.java +++ b/src/main/java/io/github/osvaldjr/usecases/RequestTargetUseCase.java @@ -44,7 +44,7 @@ public ResponseEntity execute(TargetRequest request) { ResponseEntity response; Map headersMap = getMapOfNullable(request.getHeaders()); - Map queryParametersMap = getMapOfNullable(request.getQueryParameters()); + Map queryParametersMap = getMapOfNullable(request.getQueryParams()); HttpMethod httpMethod = HttpMethod.valueOf(request.getMethod()); diff --git a/src/test/java/io/github/osvaldjr/integration/gateways/http/CustomExceptionHandler.java b/src/test/java/io/github/osvaldjr/integration/gateways/http/CustomExceptionHandler.java index f838443..57bc192 100644 --- a/src/test/java/io/github/osvaldjr/integration/gateways/http/CustomExceptionHandler.java +++ b/src/test/java/io/github/osvaldjr/integration/gateways/http/CustomExceptionHandler.java @@ -15,6 +15,7 @@ public class CustomExceptionHandler { @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseBody public ErrorResponse handleException(Exception exception) { + exception.printStackTrace(); return ErrorResponse.build(ErrorResponse.INTERNAL_SERVER_ERROR); } } diff --git a/src/test/java/io/github/osvaldjr/integration/gateways/http/TestController.java b/src/test/java/io/github/osvaldjr/integration/gateways/http/TestController.java index 9eb0f1a..fc81834 100644 --- a/src/test/java/io/github/osvaldjr/integration/gateways/http/TestController.java +++ b/src/test/java/io/github/osvaldjr/integration/gateways/http/TestController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import io.github.osvaldjr.integration.gateways.feign.IntegrationClient; @@ -78,4 +79,12 @@ public ResponseEntity patch( @ApiParam(value = "headers") @RequestHeader Map headers) { return client.patch(body, headers); } + + @ApiOperation(value = "post/plain") + @PostMapping(path = "/post/plain") + public ResponseEntity postPlain( + @ApiParam(value = "myParam") @RequestParam String myParam, + @ApiParam(value = "headers") @RequestHeader Map headers) { + return client.post("myParam=" + myParam, headers); + } } diff --git a/src/test/java/io/github/osvaldjr/unit/gateways/mock/stubby/assemblers/StubbyRequestAssemblerTest.java b/src/test/java/io/github/osvaldjr/unit/gateways/mock/stubby/assemblers/StubbyRequestAssemblerTest.java index c901400..7a0aadc 100644 --- a/src/test/java/io/github/osvaldjr/unit/gateways/mock/stubby/assemblers/StubbyRequestAssemblerTest.java +++ b/src/test/java/io/github/osvaldjr/unit/gateways/mock/stubby/assemblers/StubbyRequestAssemblerTest.java @@ -5,6 +5,9 @@ import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; +import java.util.HashMap; +import java.util.Map; + import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -26,6 +29,10 @@ void shouldAssembleRequestCorrectly( @Random StubbyRequest.RequestBody requestBody, @Random StubbyRequest.ResponseBody responseBody) { Gson gson = new Gson(); + Map map = new HashMap<>(); + map.put("key", "value"); + requestBody.setBody(map); + requestBody.setBodyType(StubbyRequest.BodyType.JSON); StubbyJsonRequest stubbyJsonRequest = stubbyRequestAssembler.assemble(requestBody, responseBody); @@ -39,6 +46,32 @@ void shouldAssembleRequestCorrectly( assertThat(request.getUrl(), equalTo(requestBody.getUrl())); assertThat(request.getJson(), equalTo(gson.toJson(requestBody.getBody()))); assertThat(request.getPost(), nullValue()); + + StubbyResponseBody response = stubbyJsonRequest.getResponse(); + assertThat(response, notNullValue()); + assertThat(response.getHeaders(), equalTo(responseBody.getHeaders())); + assertThat(response.getStatus(), equalTo(responseBody.getStatus())); + assertThat(response.getBody(), equalTo(responseBody.getBody())); + } + + @Test + void shouldAssembleRequestCorrectlyWithPlainText( + @Random StubbyRequest.RequestBody requestBody, + @Random StubbyRequest.ResponseBody responseBody) { + requestBody.setBodyType(StubbyRequest.BodyType.RAW); + + StubbyJsonRequest stubbyJsonRequest = + stubbyRequestAssembler.assemble(requestBody, responseBody); + + assertThat(stubbyJsonRequest, notNullValue()); + StubbyRequestBody request = stubbyJsonRequest.getRequest(); + assertThat(request, notNullValue()); + assertThat(request.getHeaders(), equalTo(requestBody.getHeaders())); + assertThat(request.getMethod(), equalTo(requestBody.getMethod())); + assertThat(request.getQuery(), equalTo(requestBody.getQueryParams())); + assertThat(request.getUrl(), equalTo(requestBody.getUrl())); + assertThat(request.getJson(), nullValue()); + assertThat(request.getPost().toString(), equalTo(requestBody.getBody().toString())); StubbyResponseBody response = stubbyJsonRequest.getResponse(); assertThat(response, notNullValue()); assertThat(response.getHeaders(), equalTo(responseBody.getHeaders())); diff --git a/src/test/java/io/github/osvaldjr/unit/usecases/RequestTargetUseCaseTest.java b/src/test/java/io/github/osvaldjr/unit/usecases/RequestTargetUseCaseTest.java index 034a97c..72b3a53 100644 --- a/src/test/java/io/github/osvaldjr/unit/usecases/RequestTargetUseCaseTest.java +++ b/src/test/java/io/github/osvaldjr/unit/usecases/RequestTargetUseCaseTest.java @@ -44,7 +44,7 @@ void shouldExecuteGet( targetRequest.getHost(), targetRequest.getUrl(), targetRequest.getHeaders(), - targetRequest.getQueryParameters())) + targetRequest.getQueryParams())) .thenReturn(responseEntity); ResponseEntity response = requestTargetUseCase.execute(targetRequest); @@ -65,7 +65,7 @@ void shouldExecutePost( targetRequest.getUrl(), body, targetRequest.getHeaders(), - targetRequest.getQueryParameters())) + targetRequest.getQueryParams())) .thenReturn(responseEntity); ResponseEntity response = requestTargetUseCase.execute(targetRequest); @@ -86,7 +86,7 @@ void shouldExecutePut( targetRequest.getUrl(), body, targetRequest.getHeaders(), - targetRequest.getQueryParameters())) + targetRequest.getQueryParams())) .thenReturn(responseEntity); ResponseEntity response = requestTargetUseCase.execute(targetRequest); @@ -109,7 +109,7 @@ void shouldExecuteDelete( targetRequest.getUrl(), body, targetRequest.getHeaders(), - targetRequest.getQueryParameters())) + targetRequest.getQueryParams())) .thenReturn(responseEntity); ResponseEntity response = requestTargetUseCase.execute(targetRequest); @@ -175,7 +175,7 @@ void shouldExecutePatch( targetRequest.getUrl(), body, targetRequest.getHeaders(), - targetRequest.getQueryParameters())) + targetRequest.getQueryParams())) .thenReturn(responseEntity); ResponseEntity response = requestTargetUseCase.execute(targetRequest); diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 6fd9fcc..73cd0f3 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -1,7 +1,8 @@ server.port: 9000 logging: level: - io.github.osvaldjr.gateways.feign.IntegrationClient: FULL + io.github.osvaldjr.gateways.feign.IntegrationClient: DEBUG + io.github.osvaldjr.integration: DEBUG feign: client: config: diff --git a/src/test/resources/data/integration/http_plaintext_body_defined_body_request.json b/src/test/resources/data/integration/http_plaintext_body_defined_body_request.json new file mode 100644 index 0000000..410374e --- /dev/null +++ b/src/test/resources/data/integration/http_plaintext_body_defined_body_request.json @@ -0,0 +1,13 @@ +{ + "url": "/test/post/plain", + "method": "POST", + "queryParams": { + "myParam": "123" + }, + "body": { + "key": "value" + }, + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + } +} \ No newline at end of file diff --git a/src/test/resources/data/integration/mocks/http_plaintext_body_successful-request.json b/src/test/resources/data/integration/mocks/http_plaintext_body_successful-request.json new file mode 100644 index 0000000..5dba98d --- /dev/null +++ b/src/test/resources/data/integration/mocks/http_plaintext_body_successful-request.json @@ -0,0 +1,10 @@ +{ + "url": "/post", + "method": "POST", + "body": "myParam=123", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "queryParams": {}, + "bodyType": "RAW" +} \ No newline at end of file diff --git a/src/test/resources/data/integration/mocks/http_plaintext_body_successful-response.json b/src/test/resources/data/integration/mocks/http_plaintext_body_successful-response.json new file mode 100644 index 0000000..aa46d72 --- /dev/null +++ b/src/test/resources/data/integration/mocks/http_plaintext_body_successful-response.json @@ -0,0 +1,11 @@ +{ + "headers": { + "content-type": "application/json" + }, + "status": 200, + "body": { + "name": "Linux", + "developer": true, + "year": 2000 + } +} \ No newline at end of file diff --git a/src/test/resources/features/integration.feature b/src/test/resources/features/integration.feature index a13a1a4..694a153 100644 --- a/src/test/resources/features/integration.feature +++ b/src/test/resources/features/integration.feature @@ -62,3 +62,8 @@ Feature: Integration Given I have a mock http_patch_successful for dependency integration When I make a request defined in http_patch_defined_body_request.json Then I expect to receive a 200 status + + Scenario: Validate a default steps with request defined with plain text body + Given I have a mock http_plaintext_body_successful for dependency integration + When I make a request defined in http_plaintext_body_defined_body_request.json + Then I expect to receive a 200 status \ No newline at end of file diff --git a/src/test/resources/features/security.feature b/src/test/resources/features/security.feature index 9430fc1..b81fca1 100644 --- a/src/test/resources/features/security.feature +++ b/src/test/resources/features/security.feature @@ -14,7 +14,7 @@ Feature: Security And I generate the proxy session Then the number of risks per category should not be greater than | low | medium | high | informational | - | 5 | 0 | 0 | 0 | + | 6 | 0 | 0 | 0 | Scenario: Validate active scan Given I remove all alerts