Skip to content
This repository has been archived by the owner on Sep 3, 2024. It is now read-only.

Commit

Permalink
Merge pull request #119 from sbtqa/rest-param-placeholders
Browse files Browse the repository at this point in the history
add replace placeholders in params value ability
  • Loading branch information
kosteman authored Dec 4, 2018
2 parents a167b1b + 046f227 commit c29f81f
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ public EndpointEntry() {

public void send(Map<String, String> data) {
for (Map.Entry<String, String> dataTableRow : data.entrySet()) {
reflection.setParameterValueByTitle(dataTableRow.getKey(), dataTableRow.getValue());
String key = dataTableRow.getKey();
String value = dataTableRow.getValue();

reflection.setParameterValueByTitle(key, value);
reflection.replacePlaceholdersInParameterValue(key, value);
}

send();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.sbtqa.tag.api.annotation.Body;
import ru.sbtqa.tag.api.annotation.Cookie;
import ru.sbtqa.tag.api.annotation.Endpoint;
Expand All @@ -21,6 +23,7 @@
import ru.sbtqa.tag.api.annotation.applicators.QueryApplicator;
import ru.sbtqa.tag.api.annotation.applicators.StashedApplicator;
import ru.sbtqa.tag.api.exception.RestPluginException;
import ru.sbtqa.tag.api.utils.PlaceholderUtils;
import ru.sbtqa.tag.qautils.reflect.FieldUtilsExt;

import static java.lang.String.format;
Expand All @@ -33,6 +36,8 @@
*/
public class EndpointEntryReflection {

private static final Logger LOG = LoggerFactory.getLogger(EndpointEntryReflection.class);

private EndpointEntry endpoint;
private String entryTitle;
private List<Field> fields;
Expand Down Expand Up @@ -87,18 +92,43 @@ public void applyAnnotations() {
public void setParameterValueByTitle(String name, String value) {
for (Field field : fields) {
for (Annotation annotation : field.getAnnotations()) {
if (annotation instanceof Body && ((Body) annotation).name().equals(name)
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()) {
|| annotation instanceof Cookie && ((Cookie) annotation).name().equals(name))
&& value != null && !value.isEmpty()
&& get(endpoint, field) == null) {
set(endpoint, field, value);
return;
}
}
}

throw new RestPluginException(format("There is no \"%s\" parameter in \"%s\" endpoint", name, entryTitle));
LOG.debug("There is no \"{}\" parameter in \"{}\" endpoint", name, entryTitle);
}

/**
* Get field value by parameter annotation name (it can be one of {@link ru.sbtqa.tag.api.annotation.ParameterType})
* and replace placeholders
*
* @param name placeholder
* @param value replace placeholder to this value
*/
public void replacePlaceholdersInParameterValue(String name, String value) {
for (Field field : fields) {
for (Annotation annotation : field.getAnnotations()) {
Object fieldValue = get(endpoint, field);
if ((annotation instanceof Body
|| annotation instanceof Query
|| annotation instanceof Header
|| annotation instanceof Cookie)
&& fieldValue instanceof String) {
set(endpoint, field, PlaceholderUtils.replacePlaceholder((String) fieldValue, name, value) );
}
}
}

LOG.debug("There is no \"{}\" parameter in \"{}\" endpoint", name, entryTitle);
}

/**
Expand Down
18 changes: 18 additions & 0 deletions plugins/rest-plugin/src/test/java/ru/sbtqa/tag/api/JunitTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.junit.Test;
import ru.sbtqa.tag.api.annotation.ParameterType;
import ru.sbtqa.tag.api.entries.apirequest.WithParamsEndpointEntry;
import ru.sbtqa.tag.api.entries.apirequest.WithParamsPlaceholdersEndpointEntry;
import ru.sbtqa.tag.api.entries.fromfeature.FirstRequestFromFeatureEntry;
import ru.sbtqa.tag.api.entries.methods.GetEndpointEntry;
import ru.sbtqa.tag.api.utils.JettyServiceUtils;
Expand Down Expand Up @@ -43,6 +44,23 @@ public void getWithParamsTest() {
.validate("result with map", parameters);
}

@Test
public void getWithParamsPlaceholdersTest() {
Map<String, String> parameters = new HashMap<>();
parameters.put("parameter-1", "parameter-value-1");
parameters.put("parameter-2", "parameter-value-2");
parameters.put("parameter-3", "Alex");
parameters.put("header2", "header-value-2");

Map<String, String> resultParameters = new HashMap<>();
resultParameters.put("query-parameter-name-1", "new-parameter-value-1");
resultParameters.put("header-parameter-name-1", "[{\"value\":\"parameter-value-2\", \"visible\":true, \"name\":\"Alex\"}]");
resultParameters.put("header2", "header-value-2");

api.send(WithParamsPlaceholdersEndpointEntry.class, parameters)
.validate("result with map placeholders", resultParameters);
}

@Test
public void FillOnTheFlyTest() {
Map<String, String> headers = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,20 @@ public Response getWithParams(
.build();
}

@GET
@Path("get-with-params-placeholder")
@Produces(MediaType.APPLICATION_JSON)
public Response getWithParams(
@HeaderParam(Default.HEADER_PARAMETER_NAME_1) String header1,
@HeaderParam("header2") String header2,
@QueryParam(Default.QUERY_PARAMETER_NAME_1) String query) {
SimpleResult result = new SimpleResult();
result.setResult(query + header1 + header2);

return Response.ok(result)
.build();
}

@POST
@Path("post")
@Consumes(MediaType.APPLICATION_JSON)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package ru.sbtqa.tag.api.entries.apirequest;

import cucumber.api.DataTable;
import java.util.Map;
import ru.sbtqa.tag.api.EndpointEntry;
import ru.sbtqa.tag.api.Rest;
import ru.sbtqa.tag.api.annotation.Endpoint;
import ru.sbtqa.tag.api.annotation.Header;
import ru.sbtqa.tag.api.annotation.Query;
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/get-with-params-placeholder", title = "api request with params test placeholders")
public class WithParamsPlaceholdersEndpointEntry extends EndpointEntry {

@Query(name = Default.QUERY_PARAMETER_NAME_1)
private String query = "new-${parameter-1}";

@Header(name = Default.HEADER_PARAMETER_NAME_1)
private String header = "[{\"value\":\"${parameter-2}\", \"visible\":true, \"name\":\"${parameter-3}\"}]";

@Header(name = "header2")
private String header2;

@Validation(title = "result with datatable placeholders")
public void validate(DataTable dataTable) {
validate(dataTable.asMap(String.class, String.class));
}

@Validation(title = "result with map placeholders")
public void validate(Map<String, String> data) {
String expectedResult = data.get(Default.QUERY_PARAMETER_NAME_1) + data.get(Default.HEADER_PARAMETER_NAME_1) + data.get("header2");
getResponse().body("result", equalTo(expectedResult));
}
}
14 changes: 14 additions & 0 deletions plugins/rest-plugin/src/test/resources/features/Datatable.feature
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,24 @@
@dаtatable
Feature: Datatable test

@datatable-default
Scenario: Header and param with params
* user sends request for "api request with params test" with parameters
| query-parameter-name-1 | query-parameter-value-1 |
| header-parameter-name-1 | header-parameter-value-1 |
* system returns "result with datatable" with parameters
| query-parameter-name-1 | query-parameter-value-1 |
| header-parameter-name-1 | header-parameter-value-1 |


@datatable-placeholders
Scenario: Header and param with placeholder params
* user sends request for "api request with params test placeholders" with parameters
| parameter-1 | parameter-value-1 |
| parameter-2 | parameter-value-2 |
| parameter-3 | Alex |
| header2 | header-value-2 |
* system returns "result with datatable placeholders" with parameters
| query-parameter-name-1 | new-parameter-value-1 |
| header-parameter-name-1 | [{"value":"parameter-value-2", "visible":true, "name":"Alex"}] |
| header2 | header-value-2 |
12 changes: 11 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@
<module>plugins/html-plugin</module>
<module>plugins/mobile-plugin</module>
<module>plugins/rest-plugin</module>
<module>page-factory-doc</module>
</modules>

<distributionManagement>
Expand Down Expand Up @@ -110,6 +109,17 @@
<value>true</value>
</property>
</activation>
<modules>
<module>page-factory-api</module>
<module>page-factory-core</module>
<module>tests/test-web-app</module>
<module>plugins/web-plugin</module>
<module>plugins/jdi-plugin</module>
<module>plugins/html-plugin</module>
<module>plugins/mobile-plugin</module>
<module>plugins/rest-plugin</module>
<module>page-factory-doc</module>
</modules>
<build>
<plugins>
<plugin>
Expand Down

0 comments on commit c29f81f

Please sign in to comment.