From 0cc4d3fabbcb9ba8c3396c35121db0c0bcaafd8c Mon Sep 17 00:00:00 2001 From: Konstantin Maltsev Date: Fri, 23 Nov 2018 12:14:44 +0700 Subject: [PATCH 1/2] add cookie and form-data --- .../java/ru/sbtqa/tag/api/EndpointEntry.java | 26 +++++++++++++++-- .../tag/api/EndpointEntryReflection.java | 7 +++++ .../ru/sbtqa/tag/api/annotation/Cookie.java | 19 +++++++++++++ .../tag/api/annotation/ParameterType.java | 2 +- .../sbtqa/tag/api/storage/EndpointBlank.java | 12 ++++++++ .../java/ru/sbtqa/tag/api/CucumberTest.java | 1 + .../tag/api/endpoints/ClientJsonEndpoint.java | 28 +++++++++++++++++++ .../api/entries/form/FormEndpointEntry.java | 28 +++++++++++++++++++ .../api/entries/parameters/CookieEntry.java | 22 +++++++++++++++ .../java/ru/sbtqa/tag/api/utils/Default.java | 3 ++ .../test/resources/features/Cookie.feature | 8 ++++++ .../test/resources/features/FormData.feature | 8 ++++++ 12 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/annotation/Cookie.java create mode 100644 plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/entries/form/FormEndpointEntry.java create mode 100644 plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/entries/parameters/CookieEntry.java create mode 100644 plugins/rest-plugin/src/test/resources/features/Cookie.feature create mode 100644 plugins/rest-plugin/src/test/resources/features/FormData.feature diff --git a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/EndpointEntry.java b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/EndpointEntry.java index ddc51933..c9d1857b 100644 --- a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/EndpointEntry.java +++ b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/EndpointEntry.java @@ -94,9 +94,12 @@ private RequestSpecification buildRequest() { request.queryParams(getQueryParameters()); request.headers(getHeaders()); + request.cookies(getCookies()); - if (!Rest.isBodiless(method)) { + if (!Rest.isBodiless(method) && !template.isEmpty()) { request.body(getBody()); + } else { + request.formParams(getForm()); } return request; @@ -120,14 +123,31 @@ private RequestSpecification buildRequest() { return headers; } - private String getBody() { + private Map getCookies() { + Map headers = new HashMap<>(); + + headers.putAll(reflection.getParameters(COOKIE)); + headers.putAll(blankStorage.get(title).getCookies()); + + return headers; + } + + public String getBody() { String body = TemplateUtils.loadFromResources(this.getClass(), template, PROPERTIES.getTemplateEncoding()); + return PlaceholderUtils.replacePlaceholders(body, getParameters()); + } + public Map getForm() { + return getParameters(); + } + + public Map getParameters() { Map parameters = new HashMap<>(); + parameters.putAll(reflection.getParameters(BODY)); parameters.putAll(blankStorage.get(title).getBodies()); - return PlaceholderUtils.replacePlaceholders(body, parameters); + return parameters; } public void validate(String title, Object... params) { diff --git a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/EndpointEntryReflection.java b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/EndpointEntryReflection.java index 9fd43c6f..7d54cd7d 100644 --- a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/EndpointEntryReflection.java +++ b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/EndpointEntryReflection.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; import ru.sbtqa.tag.api.annotation.Body; +import ru.sbtqa.tag.api.annotation.Cookie; import ru.sbtqa.tag.api.annotation.Endpoint; import ru.sbtqa.tag.api.annotation.FromResponse; import ru.sbtqa.tag.api.annotation.Header; @@ -89,6 +90,7 @@ public void setParameterValueByTitle(String name, String value) { if (annotation instanceof Body && ((Body) annotation).name().equals(name) || annotation instanceof Query && ((Query) annotation).name().equals(name) || annotation instanceof Header && ((Header) annotation).name().equals(name) + || annotation instanceof Cookie && ((Cookie) annotation).name().equals(name) && value != null && !value.isEmpty()) { set(endpoint, field, value); return; @@ -162,6 +164,11 @@ public Map getParameters(ParameterType type) { parameters.put(((Body) annotation).name(), get(endpoint, field)); } break; + case COOKIE: + if (annotation instanceof Cookie) { + parameters.put(((Cookie) annotation).name(), get(endpoint, field)); + } + break; default: throw new RestPluginException(format("Parameter type \"%s\" is not supported", type)); } diff --git a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/annotation/Cookie.java b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/annotation/Cookie.java new file mode 100644 index 00000000..00a8a454 --- /dev/null +++ b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/annotation/Cookie.java @@ -0,0 +1,19 @@ +package ru.sbtqa.tag.api.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Annotate field that must be substitute to request as cookie + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Cookie { + + /** + * Cookie name + */ + String name(); +} diff --git a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/annotation/ParameterType.java b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/annotation/ParameterType.java index d2e5b8b1..26d7f2ce 100644 --- a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/annotation/ParameterType.java +++ b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/annotation/ParameterType.java @@ -1,5 +1,5 @@ package ru.sbtqa.tag.api.annotation; public enum ParameterType { - HEADER, QUERY, BODY + HEADER, QUERY, BODY, COOKIE } diff --git a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/storage/EndpointBlank.java b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/storage/EndpointBlank.java index c15bbf61..af107360 100644 --- a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/storage/EndpointBlank.java +++ b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/storage/EndpointBlank.java @@ -15,6 +15,7 @@ public class EndpointBlank { private String title; private Map headers = new HashMap<>(); + private Map cookies = new HashMap<>(); private Map queries = new HashMap<>(); private Map bodies = new HashMap<>(); @@ -41,6 +42,9 @@ public void addParameter(ParameterType type, String name, String value) { case BODY: addBodyParameter(name, value); break; + case COOKIE: + addCookie(name, value); + break; } } @@ -52,6 +56,14 @@ public void addHeader(String name, Object value) { headers.put(name, value); } + public Map getCookies() { + return cookies; + } + + private void addCookie(String name, String value) { + headers.put(name, value); + } + public Map getQueries() { return queries; } diff --git a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java index 4270349b..a66a6f0d 100644 --- a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java +++ b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java @@ -13,6 +13,7 @@ glue = {"ru.sbtqa.tag.stepdefs"}, features = {"src/test/resources/features"}, plugin = {"pretty"} +// , tags = {"@cookie"} ) public class CucumberTest { diff --git a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/endpoints/ClientJsonEndpoint.java b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/endpoints/ClientJsonEndpoint.java index 702d30ea..21cfb8c6 100644 --- a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/endpoints/ClientJsonEndpoint.java +++ b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/endpoints/ClientJsonEndpoint.java @@ -1,7 +1,9 @@ package ru.sbtqa.tag.api.endpoints; import javax.ws.rs.Consumes; +import javax.ws.rs.CookieParam; import javax.ws.rs.DELETE; +import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.PATCH; @@ -90,6 +92,32 @@ public Response delete( .build(); } + @POST + @Path("form") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public Response form( + @FormParam("id") int id, + @FormParam("name") String name, + @FormParam("email") String email + ) { + SimpleResult result = new SimpleResult(); + result.setResult(id + name + email); + return Response.ok(result) + .build(); + } + + @GET + @Path("cookie") + @Produces(MediaType.APPLICATION_JSON) + public Response cookie(@CookieParam(Default.COOKIE_NAME) String cookie) { + SimpleResult result = new SimpleResult(); + result.setResult(cookie); + + return Response.ok(result) + .build(); + } + @POST @Path("request-from-feature") @Produces(MediaType.APPLICATION_JSON) diff --git a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/entries/form/FormEndpointEntry.java b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/entries/form/FormEndpointEntry.java new file mode 100644 index 00000000..ade8b751 --- /dev/null +++ b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/entries/form/FormEndpointEntry.java @@ -0,0 +1,28 @@ +package ru.sbtqa.tag.api.entries.form; + +import ru.sbtqa.tag.api.EndpointEntry; +import ru.sbtqa.tag.api.Rest; +import ru.sbtqa.tag.api.annotation.Body; +import ru.sbtqa.tag.api.annotation.Endpoint; +import ru.sbtqa.tag.api.annotation.Validation; +import ru.sbtqa.tag.api.utils.Default; + +import static org.hamcrest.Matchers.equalTo; + +@Endpoint(method = Rest.POST, path = "client/form", title = "form") +public class FormEndpointEntry extends EndpointEntry { + + @Body(name = "id") + private int id = Default.ID; + + @Body(name = "name") + private String name = Default.NAME; + + @Body(name = "email") + private String email = Default.EMAIL; + + @Validation(title = "result") + public void validate() { + getResponse().body("result", equalTo(id + name + email)); + } +} diff --git a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/entries/parameters/CookieEntry.java b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/entries/parameters/CookieEntry.java new file mode 100644 index 00000000..7930aef5 --- /dev/null +++ b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/entries/parameters/CookieEntry.java @@ -0,0 +1,22 @@ +package ru.sbtqa.tag.api.entries.parameters; + +import ru.sbtqa.tag.api.EndpointEntry; +import ru.sbtqa.tag.api.Rest; +import ru.sbtqa.tag.api.annotation.Cookie; +import ru.sbtqa.tag.api.annotation.Endpoint; +import ru.sbtqa.tag.api.annotation.Validation; +import ru.sbtqa.tag.api.utils.Default; + +import static org.hamcrest.Matchers.equalTo; + +@Endpoint(method = Rest.GET, path = "client/cookie", title = "cookie") +public class CookieEntry extends EndpointEntry { + + @Cookie(name = Default.COOKIE_NAME) + private String cookie = Default.COOKIE_VALUE; + + @Validation(title = "result") + public void validate() { + getResponse().body("result", equalTo(cookie)); + } +} diff --git a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/utils/Default.java b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/utils/Default.java index fb006d4d..153c4243 100644 --- a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/utils/Default.java +++ b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/utils/Default.java @@ -8,6 +8,9 @@ public interface Default { String EMAIL = "default_person@google.com"; String MASK = "@(\\w*)\\."; + String COOKIE_NAME = "cookie-name"; + String COOKIE_VALUE = "cookie-value"; + String QUERY_PARAMETER_NAME_1 = "query-parameter-name-1"; String QUERY_PARAMETER_NAME_2 = "query-parameter-name-2"; String QUERY_PARAMETER_VALUE_1 = "query-parameter-value-1"; diff --git a/plugins/rest-plugin/src/test/resources/features/Cookie.feature b/plugins/rest-plugin/src/test/resources/features/Cookie.feature new file mode 100644 index 00000000..b5c7b950 --- /dev/null +++ b/plugins/rest-plugin/src/test/resources/features/Cookie.feature @@ -0,0 +1,8 @@ +#language:en +@cookie +Feature: Send get with cookie + + @cookie + Scenario: Send get with cookie + * user sends request for "cookie" + * system returns "result" \ No newline at end of file diff --git a/plugins/rest-plugin/src/test/resources/features/FormData.feature b/plugins/rest-plugin/src/test/resources/features/FormData.feature new file mode 100644 index 00000000..3ad6a46e --- /dev/null +++ b/plugins/rest-plugin/src/test/resources/features/FormData.feature @@ -0,0 +1,8 @@ +#language:en +@form +Feature: Send post with form parameters + + @form + Scenario: Send post with form parameters + * user sends request for "form" + * system returns "result" \ No newline at end of file From 4be4513b9eae91714213a01947aa8c3671dc965a Mon Sep 17 00:00:00 2001 From: Konstantin Maltsev Date: Fri, 23 Nov 2018 12:15:32 +0700 Subject: [PATCH 2/2] remove comment --- .../rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java index a66a6f0d..4270349b 100644 --- a/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java +++ b/plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/CucumberTest.java @@ -13,7 +13,6 @@ glue = {"ru.sbtqa.tag.stepdefs"}, features = {"src/test/resources/features"}, plugin = {"pretty"} -// , tags = {"@cookie"} ) public class CucumberTest {