diff --git a/page-factory-doc/src/main/asciidoc/rest-plugin.asciidoc b/page-factory-doc/src/main/asciidoc/rest-plugin.asciidoc index 0a677a33..57c75da4 100644 --- a/page-factory-doc/src/main/asciidoc/rest-plugin.asciidoc +++ b/page-factory-doc/src/main/asciidoc/rest-plugin.asciidoc @@ -44,5 +44,15 @@ api.ssl.relaxed = true Подробнее об этом можно узнать в документации https://github.com/rest-assured/rest-assured/wiki/Usage#ssl[rest-assured^, role="ext-link"] +=== Филтрация запросов +Фильтр позволяет проверять и изменять запрос до того, как он будет отправлен, а также проверять и изменять ответ до того, как он вернется. Фильтры можно использовать для реализации пользовательских схем аутентификации, управления сеансами, ведения журналов и т. д. Чтобы создать фильтр, вам необходимо реализовать интерфейс `io.restassured.filter.Filter` +Чтобы использовать фильтр, вы можете указать в параметре классы фильтров (если несколько, то необходимо указывать через запятую): + +[source,] +---- +api.request.filters = ru.sbtqa.tag.api.TestFilter +---- + +Подробнее об этом можно узнать в документации https://github.com/rest-assured/rest-assured/wiki/Usage#filters[rest-assured^, role="ext-link"] diff --git a/page-factory-doc/src/main/asciidoc/rest_properties.asciidoc b/page-factory-doc/src/main/asciidoc/rest_properties.asciidoc index e2f6ad3a..7c180943 100644 --- a/page-factory-doc/src/main/asciidoc/rest_properties.asciidoc +++ b/page-factory-doc/src/main/asciidoc/rest_properties.asciidoc @@ -35,4 +35,12 @@ Возможные значения: true или false. | false + +| api.request.filters +| Фильтры для запросов + +Возможные значения: путь до классов, которые реализуют интерфейс `io.restassured.filter.Filter` + +Если используется несколько фильтров, то указываются через запятую +| |==================== \ No newline at end of file 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 5e4147cb..91d9f1c0 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 @@ -1,26 +1,37 @@ package ru.sbtqa.tag.api; +import io.restassured.filter.Filter; import io.restassured.response.Response; import io.restassured.response.ValidatableResponse; import io.restassured.specification.RequestSpecification; + +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; + import ru.sbtqa.tag.api.annotation.FromResponse; import ru.sbtqa.tag.api.annotation.Mutator; import ru.sbtqa.tag.api.annotation.Query; import ru.sbtqa.tag.api.annotation.Stashed; import ru.sbtqa.tag.api.environment.ApiEnvironment; +import ru.sbtqa.tag.api.exception.RestPluginException; import ru.sbtqa.tag.api.properties.ApiConfiguration; import ru.sbtqa.tag.api.repository.ApiPair; import ru.sbtqa.tag.api.storage.BlankStorage; import ru.sbtqa.tag.api.utils.PlaceholderUtils; +import ru.sbtqa.tag.api.utils.ReflectionUtils; import ru.sbtqa.tag.api.utils.TemplateUtils; import ru.sbtqa.tag.pagefactory.ApiEndpoint; import ru.sbtqa.tag.pagefactory.Rest; import ru.sbtqa.tag.pagefactory.annotations.rest.Endpoint; import ru.sbtqa.tag.pagefactory.utils.PathUtils; +import static io.restassured.RestAssured.filters; import static io.restassured.RestAssured.given; +import static java.lang.String.format; import static ru.sbtqa.tag.api.annotation.ParameterType.*; /** @@ -109,7 +120,10 @@ public void send() { } private RequestSpecification buildRequest() { - RequestSpecification request = given().log().all(true); + RequestSpecification request = given() + .filters(getFilters()) + .log() + .all(true); request.queryParams(getQueryParameters()); request.headers(getHeaders()); @@ -124,6 +138,16 @@ private RequestSpecification buildRequest() { return request; } + private List getFilters(){ + return PROPERTIES.getRequestFilters().stream().map(filter -> { + try { + return (Filter)Class.forName(filter).getConstructor().newInstance(); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | + NoSuchMethodException | ClassNotFoundException e) { + throw new RestPluginException(format("Failed to create filter instance \"%s\"", filter), e); + } + }).collect(Collectors.toList()); + } private Map getQueryParameters() { Map queries = new HashMap<>(); diff --git a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/properties/ApiConfiguration.java b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/properties/ApiConfiguration.java index c54093b9..bcf9af7a 100644 --- a/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/properties/ApiConfiguration.java +++ b/plugins/rest-plugin/src/main/java/ru/sbtqa/tag/api/properties/ApiConfiguration.java @@ -3,6 +3,8 @@ import org.aeonbits.owner.Config; import ru.sbtqa.tag.pagefactory.properties.Configuration; +import java.util.List; + public interface ApiConfiguration extends Config { @Key("api.baseURI") @@ -28,6 +30,10 @@ public interface ApiConfiguration extends Config { @DefaultValue("false") boolean shouldRemoveEmptyObjects(); + @Key("api.request.filters") + @DefaultValue("") + List getRequestFilters(); + static ApiConfiguration create() { return Configuration.init(ApiConfiguration.class); }