From 0dcc5f26d3ffa0ec4372f0aa9de293e8ca173ba1 Mon Sep 17 00:00:00 2001 From: bharathyes Date: Thu, 5 May 2022 11:52:08 +0530 Subject: [PATCH 01/17] handle wrapper and test definition via interface --- quickstart/jsonbox_test_api_just_wrapper.xlsx | Bin 0 -> 41570 bytes .../restel/core/RestelRunner.java | 6 +- .../core/managers/ExcelParseManager.java | 60 ++++-- .../managers/RestelDefinitionManager.java | 53 +++--- .../core/managers/RestelTestManager.java | 32 ++-- .../core/model/RestelApiDefinition.java | 73 +++++++ ...thod.java => RestelTestApiDefinition.java} | 10 +- .../core/model/RestelTestApiWrapper.java | 180 ++++++++++++++++++ .../restel/core/model/TestContext.java | 4 + .../restel/core/parser/ParserEnums.java | 1 + .../core/parser/config/ParserConfig.java | 12 ++ .../core/parser/dto/TestApiWrappers.java | 11 ++ .../restel/testng/TestCaseExecutor.java | 22 +-- .../techconative/restel/utils/Constants.java | 7 + .../restel/utils/RestelUtils.java | 44 +++-- .../manager/RestelDefinitionManagerTest.java | 21 +- .../core/model/RestelTestMethodTest.java | 8 +- .../restel/testng/TestCaseExecutorTest.java | 4 +- 18 files changed, 443 insertions(+), 105 deletions(-) create mode 100644 quickstart/jsonbox_test_api_just_wrapper.xlsx create mode 100644 src/main/java/com/techconative/restel/core/model/RestelApiDefinition.java rename src/main/java/com/techconative/restel/core/model/{RestelTestMethod.java => RestelTestApiDefinition.java} (77%) create mode 100644 src/main/java/com/techconative/restel/core/model/RestelTestApiWrapper.java create mode 100644 src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java diff --git a/quickstart/jsonbox_test_api_just_wrapper.xlsx b/quickstart/jsonbox_test_api_just_wrapper.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a6e1f460ff8e2f09c1aba5204a50623f9d658653 GIT binary patch literal 41570 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 getTestList( diff --git a/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java b/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java index 26af86e..5906064 100644 --- a/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java +++ b/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java @@ -1,16 +1,10 @@ package com.techconative.restel.core.managers; -import com.techconative.restel.core.model.BaseConfiguration; -import com.techconative.restel.core.model.RestelSuite; -import com.techconative.restel.core.model.RestelTestMethod; -import com.techconative.restel.core.model.RestelTestScenario; +import com.techconative.restel.core.model.*; import com.techconative.restel.core.parser.Parser; import com.techconative.restel.core.parser.ParserEnums; import com.techconative.restel.core.parser.config.ParserConfig; -import com.techconative.restel.core.parser.dto.BaseConfig; -import com.techconative.restel.core.parser.dto.TestApiDefinitions; -import com.techconative.restel.core.parser.dto.TestScenarios; -import com.techconative.restel.core.parser.dto.TestSuites; +import com.techconative.restel.core.parser.dto.*; import com.techconative.restel.exception.RestelException; import com.techconative.restel.utils.RestelUtils; import java.io.File; @@ -27,7 +21,8 @@ public class ExcelParseManager { private String filepath; - private List testMethods; + private List testMethods; + private List testApiWrappers; private List suites; private List execGroups; private BaseConfiguration baseConfig; @@ -55,6 +50,9 @@ private void init() { List testDefs = (List) excelData.get(ParserEnums.TEST_API_DEFINITIONS.toString().toLowerCase()); + List testWrappers = + (List) + excelData.get(ParserEnums.TEST_API_WRAPPERS.toString().toLowerCase()); List testSuites = (List) excelData.get(ParserEnums.TEST_SUITES.toString().toLowerCase()); List testSuiteExecutions = @@ -64,14 +62,19 @@ private void init() { (BaseConfig) excelData.get(ParserEnums.BASE_CONFIG.toString().toLowerCase())); testMethods = createTestMethod(testDefs, baseConfig); + testApiWrappers = createTestApiWrapper(testWrappers); suites = createSuites(testSuites); execGroups = createExecGroups(testSuiteExecutions); } - public List getTestMethods() { + public List getTestMethods() { return testMethods; } + public List getTestApiWrappers() { + return testApiWrappers; + } + public List getSuites() { return suites; } @@ -92,16 +95,16 @@ private BaseConfiguration createBaseConfigure(BaseConfig config) { * creates List of RestelTestMethod from TestDefinitions * * @param testApiDefinitions List of {@link TestApiDefinitions} - * @return list of {@link RestelTestMethod} + * @return list of {@link RestelTestApiDefinition} */ - private List createTestMethod( + private List createTestMethod( List testApiDefinitions, BaseConfiguration baseConfig) { if (testApiDefinitions.isEmpty()) { throw new RestelException("TEST_DEF_EMPTY"); } // Create a Map od case name and its Method definition. - Map testMethodMap = new HashMap<>(); + Map testMethodMap = new HashMap<>(); testApiDefinitions.forEach( testDefinition -> testMethodMap.put( @@ -111,9 +114,10 @@ private List createTestMethod( return testApiDefinitions.stream() .map( testDefinition -> { - RestelTestMethod testMethod = testMethodMap.get(testDefinition.getApiUniqueName()); + RestelTestApiDefinition testMethod = + testMethodMap.get(testDefinition.getApiUniqueName()); if (!StringUtils.isEmpty(testDefinition.getDependsOn())) { - List dependents = + List dependents = Arrays.asList(testDefinition.getDependsOn().split(",")).stream() .map( name -> { @@ -133,6 +137,32 @@ private List createTestMethod( .collect(Collectors.toList()); } + private List createTestApiWrapper(List testWrappers) { + if (testWrappers.isEmpty()) { + throw new RestelException("TEST_WRAPPER_EMPTY"); + } + // is a map needed here? there is no dependsOn in TestApiWrappers so could just do with a list + Map testApiWrapperMap = new HashMap<>(); + testWrappers.forEach( + testWrapper -> { + RestelTestApiWrapper testApiWrapper = RestelUtils.createTestWrapper(testWrapper); + testMethods.forEach( // rewrite with stream filters OR find any + testMethod -> { + if (testMethod.getCaseUniqueName().equals(testWrapper.getTestApiName())) { + testApiWrapper.setTestApiDefinition(testMethod); + } + }); + testApiWrapperMap.put(testWrapper.getTestApiWrapperName(), testApiWrapper); + }); + + List restelApiWrapperList = new ArrayList<>(); + for (TestApiWrappers testWrapper : testWrappers) { + restelApiWrapperList.add(testApiWrapperMap.get(testWrapper.getTestApiWrapperName())); + } + + return restelApiWrapperList; + } + /** * creates List of RestelSuites from TestSuites * diff --git a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java index 06759f7..81154d0 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java @@ -11,9 +11,7 @@ import com.techconative.restel.core.middleware.request.RequestMiddleware; import com.techconative.restel.core.middleware.response.ResponseMiddleware; import com.techconative.restel.core.middleware.response.ResponseWriterMiddleware; -import com.techconative.restel.core.model.GlobalContext; -import com.techconative.restel.core.model.RestelTestMethod; -import com.techconative.restel.core.model.TestContext; +import com.techconative.restel.core.model.*; import com.techconative.restel.core.model.comparator.ResponseComparator; import com.techconative.restel.core.model.oauth.BasicAuth; import com.techconative.restel.core.model.oauth.ClientCredentials; @@ -36,12 +34,12 @@ public class RestelDefinitionManager { private RequestManager requestManager; private MatcherFactory matcherFactory; - private List testDefinitions; + private List testDefinitions; private TestContext testContext; public RestelDefinitionManager( - List testDefinitions, + List testDefinitions, RequestManager requestManager, MatcherFactory matcherFactory, TestContext testContext) { @@ -61,7 +59,7 @@ public boolean executeTestScenario(String scenarioName, String suiteName) { // TODO: Add support to execute dependents // executeDependents(scenarioName, suiteName); - for (RestelTestMethod restelTestMethod : testDefinitions) { + for (RestelApiDefinition restelTestMethod : testDefinitions) { boolean result = executeTestMethod(scenarioName, suiteName, restelTestMethod); if (!result) { return result; @@ -71,10 +69,12 @@ public boolean executeTestScenario(String scenarioName, String suiteName) { } private boolean executeTestMethod( - String scenarioName, String suiteName, RestelTestMethod restelTestMethod) { + String scenarioName, String suiteName, RestelApiDefinition restelTestMethod) { // Prepare the request object RESTRequest request = createRequest(restelTestMethod); + // add test level context params + // Populate the request to context, so that it can be referenced in // other test populateRequestToContext(request, scenarioName, suiteName, restelTestMethod); @@ -116,7 +116,7 @@ private boolean executeTestMethod( return isBodyMatched; } - private void validateStatus(RESTResponse response, RestelTestMethod restelTestMethod) { + private void validateStatus(RESTResponse response, RestelApiDefinition restelTestMethod) { List expectedStatus = (List) replaceContextVariables(testContext, restelTestMethod.getAcceptedStatusCodes()); @@ -161,7 +161,7 @@ private void validateStatus(RESTResponse response, RestelTestMethod restelTestMe * @return The expected response object. * @param restelTestMethod */ - private Object getExpectedBody(RestelTestMethod restelTestMethod) { + private Object getExpectedBody(RestelApiDefinition restelTestMethod) { // Check if expected body is Json type if (Objects.isNull(restelTestMethod.getExpectedResponse())) { return replaceContextVariables(testContext, restelTestMethod.getExpectedResponse()); @@ -188,7 +188,7 @@ private Object getExpectedBody(RestelTestMethod restelTestMethod) { * @return {@link RESTRequest} instance corresponding to the given test name. * @param restelTestMethod */ - private RESTRequest createRequest(RestelTestMethod restelTestMethod) { + private RESTRequest createRequest(RestelApiDefinition restelTestMethod) { return RESTRequest.builder() .method(restelTestMethod.getRequestMethod()) .endpoint(getRequestURL(restelTestMethod)) @@ -204,7 +204,7 @@ private RESTRequest createRequest(RestelTestMethod restelTestMethod) { * @return The expected response object. * @param restelTestMethod */ - private Map getExpectedHeaders(RestelTestMethod restelTestMethod) { + private Map getExpectedHeaders(RestelApiDefinition restelTestMethod) { if (CollectionUtils.isEmpty(restelTestMethod.getExpectedHeader())) { return null; } @@ -217,7 +217,7 @@ private Map getExpectedHeaders(RestelTestMethod restelTestMethod * @return The request headers map. * @param restelTestMethod */ - private Map getRequestQueryParams(RestelTestMethod restelTestMethod) { + private Map getRequestQueryParams(RestelApiDefinition restelTestMethod) { if (CollectionUtils.isEmpty(restelTestMethod.getRequestQueryParams())) { return restelTestMethod.getRequestQueryParams(); } @@ -230,7 +230,7 @@ private Map getRequestQueryParams(RestelTestMethod restelTestMet * @return The request headers map. * @param restelTestMethod */ - private Map getRequestHeaders(RestelTestMethod restelTestMethod) { + private Map getRequestHeaders(RestelApiDefinition restelTestMethod) { if (CollectionUtils.isEmpty(restelTestMethod.getRequestHeaders())) { return restelTestMethod.getRequestHeaders(); } @@ -243,7 +243,7 @@ private Map getRequestHeaders(RestelTestMethod restelTestMethod) * @return The request headers map. * @param restelTestMethod */ - private Object getRequestBody(RestelTestMethod restelTestMethod) { + private Object getRequestBody(RestelApiDefinition restelTestMethod) { if (Objects.isNull(restelTestMethod.getRequestBodyParams())) { return restelTestMethod.getRequestBodyParams(); } @@ -264,8 +264,9 @@ private Object getRequestBody(RestelTestMethod restelTestMethod) { * @return The expected response object. * @param restelTestMethod */ - private String getRequestURL(RestelTestMethod restelTestMethod) { - return replaceContextVariables(testContext, restelTestMethod.getRequestUrl()).toString(); + private String getRequestURL(RestelApiDefinition restelTestMethod) { + return replaceContextVariables(testContext, restelTestMethod.getRequestUrl()) + .toString(); } /** @@ -274,7 +275,7 @@ private String getRequestURL(RestelTestMethod restelTestMethod) { * @return List of {@link ResponseComparator} instances for the given test name. * @param restelTestMethod */ - private List getResponseMatchers(RestelTestMethod restelTestMethod) { + private List getResponseMatchers(RestelApiDefinition restelTestMethod) { return Collections.singletonList(getMatcher(restelTestMethod.getExpectedResponseMatcher())); } @@ -321,7 +322,7 @@ private boolean doMatching( * @return The list of matchers for the header as configured in the test. * @param restelTestMethod */ - private List getHeaderMatchers(RestelTestMethod restelTestMethod) { + private List getHeaderMatchers(RestelApiDefinition restelTestMethod) { return Collections.singletonList(getMatcher(restelTestMethod.getExpectedHeaderMatcher())); } @@ -332,7 +333,10 @@ private List getHeaderMatchers(RestelTestMethod restelTestMe * @param restelTestMethod */ private void populateResponseToContext( - RESTResponse response, RestelTestMethod restelTestMethod, String testName, String suiteName) { + RESTResponse response, + RestelApiDefinition restelTestMethod, + String testName, + String suiteName) { if (response.getResponse() != null) { if (!Objects.isNull(response.getResponse().getBody())) { if (StringUtils.isNotEmpty(response.getResponse().getBody().toString())) { @@ -347,7 +351,7 @@ private void populateResponseToContext( } private Map getResponseUpdatedContext( - RESTResponse response, RestelTestMethod restelTestMethod) { + RESTResponse response, RestelApiDefinition restelTestMethod) { Map existingContextMap; Object body = response.getResponse().getBody(); Object existingContextVal = testContext.resolveValue(restelTestMethod.getCaseUniqueName()); @@ -415,7 +419,7 @@ private void addToGlobalContext( * @return List of {@link ResponseMiddleware} instances configured for the given test. * @param restelTestMethod */ - private List getPostRequestMiddlewares(RestelTestMethod restelTestMethod) { + private List getPostRequestMiddlewares(RestelApiDefinition restelTestMethod) { List middlewares = new ArrayList<>(); if (!Objects.isNull(restelTestMethod.getRequestPostCallHook())) { String path = restelTestMethod.getRequestPostCallHook().get(Constants.WRITE).toString(); @@ -432,7 +436,7 @@ private List getPostRequestMiddlewares(RestelTestMethod rest * @return List of {@link ResponseMiddleware} instances configured for the given test. * @param restelTestMethod */ - private List getPreRequestMiddlewares(RestelTestMethod restelTestMethod) { + private List getPreRequestMiddlewares(RestelApiDefinition restelTestMethod) { List middlewares = new ArrayList<>(); if (!Objects.isNull(restelTestMethod.getRequestPreCallHook())) { try { @@ -473,7 +477,10 @@ private List getPreRequestMiddlewares(RestelTestMethod restel * @param restelTestMethod */ private void populateRequestToContext( - RESTRequest request, String testName, String suiteName, RestelTestMethod restelTestMethod) { + RESTRequest request, + String testName, + String suiteName, + RestelApiDefinition restelTestMethod) { if (request.getRequestBody() != null) { Map reqMap = Map.of(Constants.REQUEST, request.getRequestBody()); testContext.addValue(restelTestMethod.getCaseUniqueName(), reqMap); diff --git a/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java b/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java index 53cd595..f140af3 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java @@ -1,9 +1,6 @@ package com.techconative.restel.core.managers; -import com.techconative.restel.core.model.BaseConfiguration; -import com.techconative.restel.core.model.RestelSuite; -import com.techconative.restel.core.model.RestelTestMethod; -import com.techconative.restel.core.model.RestelTestScenario; +import com.techconative.restel.core.model.*; import com.techconative.restel.exception.RestelException; import java.util.*; import javax.annotation.PostConstruct; @@ -19,10 +16,10 @@ @Component public class RestelTestManager { - private List testDefinitions; + private List testDefinitions; private List testScenarios; - private Map indexedTestDefinitions; + private Map indexedTestDefinitions; private Map indexedTestScenarios; private Map indexedTestSuites; private BaseConfiguration baseConfig; @@ -46,9 +43,12 @@ private void configure() { indexedTestScenarios = new HashMap<>(); indexedTestSuites = new HashMap<>(); - for (RestelTestMethod testMethod : excelParseManager.getTestMethods()) { + for (RestelApiDefinition testMethod : excelParseManager.getTestMethods()) { indexedTestDefinitions.put(testMethod.getCaseUniqueName(), testMethod); } + for (RestelApiDefinition testApiWrapper : excelParseManager.getTestApiWrappers()) { + indexedTestDefinitions.put(testApiWrapper.getCaseUniqueName(), testApiWrapper); + } for (RestelSuite suite : excelParseManager.getSuites()) { indexedTestSuites.put(suite.getSuiteName(), suite); } @@ -133,17 +133,18 @@ private void isCyclic(RestelTestScenario executionGroup, List testMethods) { + private void validateDefinition(List testMethods) { testMethods.forEach(testMethod -> isCyclic(testMethod, testMethod.getDependentOn())); } /** * checks if there is any cyclic dependencies for testMethod. * - * @param testMethod {@link RestelTestMethod} - * @param childMethods list of child {@link RestelTestMethod} for testMethod. + * @param testMethod {@link RestelApiDefinition} + * @param childMethods list of child {@link RestelApiDefinition} for testMethod. */ - private void isCyclic(RestelTestMethod testMethod, List childMethods) { + private void isCyclic( + RestelApiDefinition testMethod, List childMethods) { if (!CollectionUtils.isEmpty(childMethods)) { childMethods.forEach( m -> { @@ -165,10 +166,11 @@ public BaseConfiguration getBaseConfig() { /** * Gets the method with the given name * - * @param methodName The method name for which the {@link RestelTestMethod} to be searched for. - * @return {@link RestelTestMethod} with the given name + * @param methodName The method name for which the {@link RestelTestApiDefinition} to be searched + * for. + * @return {@link RestelTestApiDefinition} with the given name */ - public RestelTestMethod getTestMethod(String methodName) { + public RestelApiDefinition getTestMethod(String methodName) { return indexedTestDefinitions.get(methodName); } @@ -177,7 +179,7 @@ public RestelTestMethod getTestMethod(String methodName) { * * @return List of test methods */ - public List getTestDefintions() { + public List getTestDefintions() { return Collections.unmodifiableList(testDefinitions); } diff --git a/src/main/java/com/techconative/restel/core/model/RestelApiDefinition.java b/src/main/java/com/techconative/restel/core/model/RestelApiDefinition.java new file mode 100644 index 0000000..0db030a --- /dev/null +++ b/src/main/java/com/techconative/restel/core/model/RestelApiDefinition.java @@ -0,0 +1,73 @@ +package com.techconative.restel.core.model; + +import com.fasterxml.jackson.databind.JsonNode; +import java.util.List; +import java.util.Map; + +public interface RestelApiDefinition { + String getCaseUniqueName(); + + void setCaseUniqueName(String caseUniqueName); + + String getCaseDescription(); + + void setCaseDescription(String caseDescription); + + String getRequestUrl(); + + void setRequestUrl(String requestUrl); + + String getRequestMethod(); + + void setRequestMethod(String requestMethod); + + Map getRequestHeaders(); + + void setRequestHeaders(Map requestHeaders); + + Map getRequestQueryParams(); + + void setRequestQueryParams(Map requestQueryParams); + + Object getRequestBodyParams(); + + void setRequestBodyParams(Object requestBodyParams); + + JsonNode getRequestPreCallHook(); + + void setRequestPreCallHook(JsonNode requestPreCallHook); + + JsonNode getRequestPostCallHook(); + + void setRequestPostCallHook(JsonNode requestPostCallHook); + + Object getExpectedResponse(); + + void setExpectedResponse(Object expectedResponse); + + String getExpectedResponseMatcher(); + + void setExpectedResponseMatcher(String expectedResponseMatcher); + + Map getExpectedHeader(); + + void setExpectedHeader(Map expectedHeader); + + String getExpectedHeaderMatcher(); + + void setExpectedHeaderMatcher(String expectedHeaderMatcher); + + List getAcceptedStatusCodes(); + + void setAcceptedStatusCodes(List acceptedStatusCodes); + + List getDependentOn(); + + void setDependentOn(List dependentOn); + + List getParentTests(); + + void setParentTests(List parentTests); + + public void addParentTest(String parentTest); +} diff --git a/src/main/java/com/techconative/restel/core/model/RestelTestMethod.java b/src/main/java/com/techconative/restel/core/model/RestelTestApiDefinition.java similarity index 77% rename from src/main/java/com/techconative/restel/core/model/RestelTestMethod.java rename to src/main/java/com/techconative/restel/core/model/RestelTestApiDefinition.java index be71374..352ab5a 100644 --- a/src/main/java/com/techconative/restel/core/model/RestelTestMethod.java +++ b/src/main/java/com/techconative/restel/core/model/RestelTestApiDefinition.java @@ -6,14 +6,8 @@ import java.util.Map; import lombok.Data; -/** - * Represents a test as parsed from the excel sheet.
    - * Note: Each of this will be translated to a TestNG test method, smallest unit of TestNG. - * - * @author kannanr - */ @Data -public class RestelTestMethod { +public class RestelTestApiDefinition implements RestelApiDefinition { private String caseUniqueName; private String caseDescription; private String requestUrl; @@ -28,7 +22,7 @@ public class RestelTestMethod { private Map expectedHeader; private String expectedHeaderMatcher; private List acceptedStatusCodes; - private List dependentOn; + private List dependentOn; private List parentTests = new ArrayList<>(); public void addParentTest(String parentTest) { diff --git a/src/main/java/com/techconative/restel/core/model/RestelTestApiWrapper.java b/src/main/java/com/techconative/restel/core/model/RestelTestApiWrapper.java new file mode 100644 index 0000000..421e50a --- /dev/null +++ b/src/main/java/com/techconative/restel/core/model/RestelTestApiWrapper.java @@ -0,0 +1,180 @@ +package com.techconative.restel.core.model; + +import com.fasterxml.jackson.databind.JsonNode; +import java.util.List; +import java.util.Map; +import lombok.Data; + +@Data +public class RestelTestApiWrapper implements RestelApiDefinition { + private RestelTestApiDefinition testApiDefinition; + + private String testApiWrapperName; + private String testApiWrapperDescription; + private Map testApiWrapperParameters; + + @Override + public String getCaseUniqueName() { + return testApiWrapperName; + } + + @Override + public void setCaseUniqueName(String caseUniqueName) { + this.testApiWrapperName = caseUniqueName; + } + + @Override + public String getCaseDescription() { + return testApiWrapperDescription; + } + + @Override + public void setCaseDescription(String caseDescription) { + this.testApiWrapperDescription = caseDescription; + } + + @Override + public String getRequestUrl() { + return testApiDefinition.getRequestUrl(); + } + + @Override + public void setRequestUrl(String requestUrl) { + testApiDefinition.setRequestUrl(requestUrl); + } + + @Override + public String getRequestMethod() { + return testApiDefinition.getRequestMethod(); + } + + @Override + public void setRequestMethod(String requestMethod) { + testApiDefinition.setRequestMethod(requestMethod); + } + + @Override + public Map getRequestHeaders() { + return testApiDefinition.getRequestHeaders(); + } + + @Override + public void setRequestHeaders(Map requestHeaders) { + testApiDefinition.setRequestHeaders(requestHeaders); + } + + @Override + public Map getRequestQueryParams() { + return testApiDefinition.getRequestQueryParams(); + } + + @Override + public void setRequestQueryParams(Map requestQueryParams) { + testApiDefinition.setRequestQueryParams(requestQueryParams); + } + + @Override + public Object getRequestBodyParams() { + return testApiDefinition.getRequestBodyParams(); + } + + @Override + public void setRequestBodyParams(Object requestBodyParams) { + testApiDefinition.setRequestBodyParams(requestBodyParams); + } + + @Override + public JsonNode getRequestPreCallHook() { + return testApiDefinition.getRequestPreCallHook(); + } + + @Override + public void setRequestPreCallHook(JsonNode requestPreCallHook) { + testApiDefinition.setRequestPreCallHook(requestPreCallHook); + } + + @Override + public JsonNode getRequestPostCallHook() { + return testApiDefinition.getRequestPostCallHook(); + } + + @Override + public void setRequestPostCallHook(JsonNode requestPostCallHook) { + testApiDefinition.setRequestPostCallHook(requestPostCallHook); + } + + @Override + public Object getExpectedResponse() { + return testApiDefinition.getExpectedResponse(); + } + + @Override + public void setExpectedResponse(Object expectedResponse) { + testApiDefinition.setExpectedResponse(expectedResponse); + } + + @Override + public String getExpectedResponseMatcher() { + return testApiDefinition.getExpectedResponseMatcher(); + } + + @Override + public void setExpectedResponseMatcher(String expectedResponseMatcher) { + testApiDefinition.setExpectedResponseMatcher(expectedResponseMatcher); + } + + @Override + public Map getExpectedHeader() { + return testApiDefinition.getExpectedHeader(); + } + + @Override + public void setExpectedHeader(Map expectedHeader) { + testApiDefinition.setExpectedHeader(expectedHeader); + } + + @Override + public String getExpectedHeaderMatcher() { + return testApiDefinition.getExpectedHeaderMatcher(); + } + + @Override + public void setExpectedHeaderMatcher(String expectedHeaderMatcher) { + testApiDefinition.setExpectedHeaderMatcher(expectedHeaderMatcher); + } + + @Override + public List getAcceptedStatusCodes() { + return testApiDefinition.getAcceptedStatusCodes(); + } + + @Override + public void setAcceptedStatusCodes(List acceptedStatusCodes) { + testApiDefinition.setAcceptedStatusCodes(acceptedStatusCodes); + } + + @Override + public List getDependentOn() { + return testApiDefinition.getDependentOn(); + } + + @Override + public void setDependentOn(List dependentOn) { + testApiDefinition.setDependentOn(dependentOn); + } + + @Override + public List getParentTests() { + return testApiDefinition.getParentTests(); + } + + @Override + public void setParentTests(List parentTests) { + testApiDefinition.setParentTests(parentTests); + } + + @Override + public void addParentTest(String parentTest) { + testApiDefinition.addParentTest(parentTest); + } +} diff --git a/src/main/java/com/techconative/restel/core/model/TestContext.java b/src/main/java/com/techconative/restel/core/model/TestContext.java index 6abb118..55e61c4 100644 --- a/src/main/java/com/techconative/restel/core/model/TestContext.java +++ b/src/main/java/com/techconative/restel/core/model/TestContext.java @@ -14,6 +14,10 @@ public TestContext(String testName) { this.testName = testName; } + public TestContext(TestContext parent) { + super(parent); + } + public String getTestName() { return this.testName; } diff --git a/src/main/java/com/techconative/restel/core/parser/ParserEnums.java b/src/main/java/com/techconative/restel/core/parser/ParserEnums.java index f21d4e5..bcff848 100644 --- a/src/main/java/com/techconative/restel/core/parser/ParserEnums.java +++ b/src/main/java/com/techconative/restel/core/parser/ParserEnums.java @@ -2,6 +2,7 @@ public enum ParserEnums { TEST_API_DEFINITIONS("TestApiDefinitions"), + TEST_API_WRAPPERS("TestApiWrappers"), TEST_SUITES("TestSuites"), TEST_SCENARIOS("TestScenarios"), BASE_CONFIG("BaseConfig"); diff --git a/src/main/java/com/techconative/restel/core/parser/config/ParserConfig.java b/src/main/java/com/techconative/restel/core/parser/config/ParserConfig.java index ae847ca..3b01a8e 100644 --- a/src/main/java/com/techconative/restel/core/parser/config/ParserConfig.java +++ b/src/main/java/com/techconative/restel/core/parser/config/ParserConfig.java @@ -26,6 +26,8 @@ public class ParserConfig { Map.of( ParserEnums.TEST_API_DEFINITIONS.toString(), ParserEnums.TEST_API_DEFINITIONS.getValue(), + ParserEnums.TEST_API_WRAPPERS.toString(), + ParserEnums.TEST_API_WRAPPERS.getValue(), ParserEnums.TEST_SCENARIOS.toString(), ParserEnums.TEST_SCENARIOS.getValue(), ParserEnums.TEST_SUITES.toString(), @@ -93,6 +95,16 @@ private void init() { this.sheetMap.put(Constants.TEST_SCENARIOS, new SheetConfig(SheetType.COLUMN, fieldMap)); // Test_Scenarios sheet - end + // Test_Api_Wrapper sheet - start + fieldMap = new HashMap<>(); + fieldMap.put(Constants.TEST_API_WRAPPER_NAME, Functions.STRING_FUNCTION); + fieldMap.put(Constants.TEST_API_WRAPPER_DESCRIPTION, Functions.STRING_FUNCTION); + fieldMap.put(Constants.TEST_API_WRAPPER_PARAMETERS, Functions.STRING_FUNCTION); + fieldMap.put(Constants.TEST_API_NAME, Functions.STRING_FUNCTION); + + this.sheetMap.put(Constants.TEST_API_WRAPPERS, new SheetConfig(SheetType.COLUMN, fieldMap)); + // Test_Api_Wrapper sheet - end + // Test_Api_Definitions sheet - start fieldMap = new HashMap<>(); fieldMap.put(Constants.API_UNIQUE_NAME, Functions.STRING_FUNCTION); diff --git a/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java b/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java new file mode 100644 index 0000000..9c2127d --- /dev/null +++ b/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java @@ -0,0 +1,11 @@ +package com.techconative.restel.core.parser.dto; + +import lombok.Data; + +@Data +public class TestApiWrappers { + private String testApiWrapperName; + private String testApiWrapperDescription; + private String testApiWrapperParameters; + private String testApiName; +} diff --git a/src/main/java/com/techconative/restel/testng/TestCaseExecutor.java b/src/main/java/com/techconative/restel/testng/TestCaseExecutor.java index 38945d9..071e1ce 100644 --- a/src/main/java/com/techconative/restel/testng/TestCaseExecutor.java +++ b/src/main/java/com/techconative/restel/testng/TestCaseExecutor.java @@ -5,14 +5,10 @@ import com.techconative.restel.core.managers.RequestManager; import com.techconative.restel.core.managers.RestelDefinitionManager; import com.techconative.restel.core.managers.RestelTestManager; -import com.techconative.restel.core.model.RestelSuite; -import com.techconative.restel.core.model.RestelTestMethod; -import com.techconative.restel.core.model.RestelTestScenario; -import com.techconative.restel.core.model.TestContext; +import com.techconative.restel.core.model.*; import com.techconative.restel.core.model.functions.RestelFunction; import com.techconative.restel.core.resolver.assertion.RestelAssertionResolver; import com.techconative.restel.core.resolver.function.RestelFunctionExecutor; -import com.techconative.restel.core.utils.ContextUtils; import com.techconative.restel.exception.InvalidConfigException; import com.techconative.restel.exception.RestelException; import com.techconative.restel.utils.Constants; @@ -30,7 +26,7 @@ /** * Executor takes care of resolving the variables, making API call along with the configured - * middlewares and does the testing as configured in the {@link RestelTestMethod}. + * middlewares and does the testing as configured in the {@link RestelTestApiDefinition}. */ @Slf4j public class TestCaseExecutor { @@ -38,11 +34,9 @@ public class TestCaseExecutor { @Autowired private RestelTestManager testManager; - @Autowired private ContextUtils contextUtils; - @Autowired private MatcherFactory matcherFactory; - private List testDefinition; + private List testDefinition; private RestelTestScenario testExecutionDefinition; @@ -138,7 +132,8 @@ public boolean executeTest() { // executeAssertions(); // } RestelDefinitionManager manager = - new RestelDefinitionManager(testDefinition, requestManager, matcherFactory, testContext); + new RestelDefinitionManager( + testDefinition, requestManager, matcherFactory, testContext); return manager.executeTestScenario( testExecutionDefinition.getScenarioName(), testExecutionDefinition.getTestSuiteName()); } @@ -230,17 +225,18 @@ private void validateFunctionDataPattern(String data) { } /** - * @param testDefinitions {@link RestelTestMethod} + * @param testDefinitions {@link RestelTestApiDefinition} * @param definitionName name of the test definition which needs to be checked if its belongs to * the given test definition or its child test definition * @return Check whether the definitionName is equals to given tesDefinitions or its child * testDefinitions, */ - private boolean hasDefinitionName(RestelTestMethod testDefinitions, String definitionName) { + private boolean hasDefinitionName( + RestelApiDefinition testDefinitions, String definitionName) { if (StringUtils.equals(testDefinitions.getCaseUniqueName(), definitionName)) { return true; } else { - for (RestelTestMethod testMethod : testDefinitions.getDependentOn()) { + for (RestelApiDefinition testMethod : testDefinitions.getDependentOn()) { if (hasDefinitionName(testMethod, definitionName)) { return true; } diff --git a/src/main/java/com/techconative/restel/utils/Constants.java b/src/main/java/com/techconative/restel/utils/Constants.java index 583b973..ab4bd8b 100644 --- a/src/main/java/com/techconative/restel/utils/Constants.java +++ b/src/main/java/com/techconative/restel/utils/Constants.java @@ -56,6 +56,13 @@ private Constants() {} public static final String TEST_ASSERTION = "assertion"; public static final String TEST_FUNCTION = "function"; + // Test api wrapper + public static final String TEST_API_WRAPPERS = "test_api_wrappers"; + public static final String TEST_API_WRAPPER_NAME = "test_api_wrapper_name"; + public static final String TEST_API_WRAPPER_DESCRIPTION = "test_api_wrapper_description"; + public static final String TEST_API_WRAPPER_PARAMETERS = "test_api_wrapper_parameters"; + public static final String TEST_API_NAME = "test_api_name"; + // Test Definition public static final String API_UNIQUE_NAME = "api_unique_name"; public static final String API_DESCRIPTION = "api_description"; diff --git a/src/main/java/com/techconative/restel/utils/RestelUtils.java b/src/main/java/com/techconative/restel/utils/RestelUtils.java index e28b36c..00f7539 100644 --- a/src/main/java/com/techconative/restel/utils/RestelUtils.java +++ b/src/main/java/com/techconative/restel/utils/RestelUtils.java @@ -2,18 +2,12 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; -import com.techconative.restel.core.model.BaseConfiguration; -import com.techconative.restel.core.model.RestelSuite; -import com.techconative.restel.core.model.RestelTestMethod; -import com.techconative.restel.core.model.RestelTestScenario; +import com.techconative.restel.core.model.*; import com.techconative.restel.core.model.assertion.AssertType; import com.techconative.restel.core.model.assertion.RestelAssertion; import com.techconative.restel.core.model.functions.FunctionOps; import com.techconative.restel.core.model.functions.RestelFunction; -import com.techconative.restel.core.parser.dto.BaseConfig; -import com.techconative.restel.core.parser.dto.TestApiDefinitions; -import com.techconative.restel.core.parser.dto.TestScenarios; -import com.techconative.restel.core.parser.dto.TestSuites; +import com.techconative.restel.core.parser.dto.*; import com.techconative.restel.exception.RestelException; import java.util.*; import java.util.stream.Collectors; @@ -29,12 +23,12 @@ private RestelUtils() {} * creates ReselTestMethod from testDefinition. * * @param testDefinition The {@link TestApiDefinitions} Object. - * @return {@link RestelTestMethod} + * @return {@link RestelTestApiDefinition} */ - public static RestelTestMethod createTestMethod( + public static RestelTestApiDefinition createTestMethod( TestApiDefinitions testDefinition, BaseConfiguration baseConfig) { validate(testDefinition); - RestelTestMethod testMethod = new RestelTestMethod(); + RestelTestApiDefinition testMethod = new RestelTestApiDefinition(); testMethod.setCaseUniqueName(testDefinition.getApiUniqueName()); testMethod.setCaseDescription(testDefinition.getApiDescription()); @@ -82,6 +76,19 @@ public static RestelTestMethod createTestMethod( return testMethod; } + public static RestelTestApiWrapper createTestWrapper(TestApiWrappers testWrappers) { + validate(testWrappers); + Map params = + StringUtils.isEmpty(testWrappers.getTestApiWrapperParameters()) + ? null + : ObjectMapperUtils.convertToMap(testWrappers.getTestApiWrapperParameters()); + RestelTestApiWrapper restelTestWrapper = new RestelTestApiWrapper(); + restelTestWrapper.setTestApiWrapperName(testWrappers.getTestApiWrapperName()); + restelTestWrapper.setTestApiWrapperDescription(testWrappers.getTestApiWrapperDescription()); + restelTestWrapper.setTestApiWrapperParameters(params); + return restelTestWrapper; + } + /** * Creates a Restelsuite from testSuite * @@ -237,6 +244,21 @@ private static void validate(TestApiDefinitions testApiDefinitions) { } } + private static void validate(TestApiWrappers testApiWrappers) { + if (StringUtils.isEmpty(testApiWrappers.getTestApiName())) { + throw new RestelException("TEST_API_NAME_EMPTY"); + } + if (StringUtils.isEmpty(testApiWrappers.getTestApiWrapperName())) { + throw new RestelException("TEST_API_WRAPPER_NAME_EMPTY"); + } + if (StringUtils.isEmpty(testApiWrappers.getTestApiWrapperDescription())) { + throw new RestelException("TEST_API_WRAPPER_DESC_EMPTY"); + } + if (StringUtils.isEmpty(testApiWrappers.getTestApiWrapperParameters())) { + throw new RestelException("TEST_API_WRAPPER_PARAM_EMPTY"); + } + } + private static void validate(TestSuites testSuites) { if (StringUtils.isEmpty(testSuites.getSuiteUniqueName())) { throw new RestelException("SUITE_NAME_EMPTY"); diff --git a/src/test/java/restel/core/manager/RestelDefinitionManagerTest.java b/src/test/java/restel/core/manager/RestelDefinitionManagerTest.java index a357345..8d593a0 100644 --- a/src/test/java/restel/core/manager/RestelDefinitionManagerTest.java +++ b/src/test/java/restel/core/manager/RestelDefinitionManagerTest.java @@ -6,8 +6,7 @@ import com.techconative.restel.core.http.ResponseBody; import com.techconative.restel.core.managers.RequestManager; import com.techconative.restel.core.managers.RestelDefinitionManager; -import com.techconative.restel.core.model.GlobalContext; -import com.techconative.restel.core.model.RestelTestMethod; +import com.techconative.restel.core.model.RestelTestApiDefinition; import com.techconative.restel.core.model.TestContext; import com.techconative.restel.core.model.comparator.ExactMatchComparator; import com.techconative.restel.core.model.comparator.NoOPMatcher; @@ -63,7 +62,7 @@ public void testExecuteTest() throws NoSuchFieldException { @Test public void testExecuteTestReqBody() throws NoSuchFieldException { - RestelTestMethod method = createTestDef(); + RestelTestApiDefinition method = createTestDef(); method.setRequestHeaders(new HashMap<>()); method.setRequestBodyParams("Body"); FieldSetter.setField( @@ -81,7 +80,7 @@ public void testExecuteTestReqBody() throws NoSuchFieldException { @Test public void testExecuteTestResBody() throws NoSuchFieldException { - RestelTestMethod method = createTestDef(); + RestelTestApiDefinition method = createTestDef(); method.setRequestHeaders(new HashMap<>()); method.setExpectedResponse("{\"key\": \"value\"}"); FieldSetter.setField( @@ -101,7 +100,7 @@ public void testExecuteTestResBody() throws NoSuchFieldException { @Test public void testExecuteTestOauth2Client() throws NoSuchFieldException { - RestelTestMethod method = createTestDef(); + RestelTestApiDefinition method = createTestDef(); method.setRequestHeaders(new HashMap<>()); method.setExpectedResponse("{\"key\": \"value\"}"); method.setRequestPreCallHook(clientCredential()); @@ -122,7 +121,7 @@ public void testExecuteTestOauth2Client() throws NoSuchFieldException { @Test public void testExecuteTestOauth2Resource() throws NoSuchFieldException { - RestelTestMethod method = createTestDef(); + RestelTestApiDefinition method = createTestDef(); method.setRequestHeaders(new HashMap<>()); method.setExpectedResponse("{\"key\": \"value\"}"); method.setRequestPreCallHook(resourceOwner()); @@ -143,7 +142,7 @@ public void testExecuteTestOauth2Resource() throws NoSuchFieldException { @Test public void testExecuteTestResBodyJson() throws NoSuchFieldException { - RestelTestMethod method = createTestDef(); + RestelTestApiDefinition method = createTestDef(); method.setRequestHeaders(new HashMap<>()); method.setExpectedResponse(Map.of("key", "value")); FieldSetter.setField( @@ -163,7 +162,7 @@ public void testExecuteTestResBodyJson() throws NoSuchFieldException { @Test(expected = AssertionError.class) public void testExecuteTestStatusCodeEmpty() throws NoSuchFieldException { - RestelTestMethod method = createTestDef(); + RestelTestApiDefinition method = createTestDef(); method.setRequestHeaders(new HashMap<>()); method.setRequestBodyParams("Body"); method.setAcceptedStatusCodes(Arrays.asList("500")); @@ -181,7 +180,7 @@ public void testExecuteTestStatusCodeEmpty() throws NoSuchFieldException { @Test public void testExecuteTestStatusCodeParameter() throws NoSuchFieldException { - RestelTestMethod method = createTestDef(); + RestelTestApiDefinition method = createTestDef(); method.setRequestHeaders(new HashMap<>()); method.setRequestBodyParams("Body"); method.setAcceptedStatusCodes(Arrays.asList("200", "${accepted_status_code}")); @@ -200,8 +199,8 @@ public void testExecuteTestStatusCodeParameter() throws NoSuchFieldException { Assert.assertTrue(manager.executeTestScenario("Sample", "suite")); } - private RestelTestMethod createTestDef() { - RestelTestMethod definitions = new RestelTestMethod(); + private RestelTestApiDefinition createTestDef() { + RestelTestApiDefinition definitions = new RestelTestApiDefinition(); definitions.setCaseUniqueName("Sample"); definitions.setRequestUrl("/test"); definitions.setRequestQueryParams(Map.of("k", "v")); diff --git a/src/test/java/restel/core/model/RestelTestMethodTest.java b/src/test/java/restel/core/model/RestelTestMethodTest.java index c886310..bfa478c 100644 --- a/src/test/java/restel/core/model/RestelTestMethodTest.java +++ b/src/test/java/restel/core/model/RestelTestMethodTest.java @@ -1,6 +1,6 @@ package restel.core.model; -import com.techconative.restel.core.model.RestelTestMethod; +import com.techconative.restel.core.model.RestelTestApiDefinition; import com.techconative.restel.utils.ObjectMapperUtils; import java.util.Arrays; import java.util.Map; @@ -10,7 +10,7 @@ public class RestelTestMethodTest { @Test public void testRestelTestMethod() { - RestelTestMethod testMethod = new RestelTestMethod(); + RestelTestApiDefinition testMethod = new RestelTestApiDefinition(); testMethod.setAcceptedStatusCodes(Arrays.asList("200")); Assert.assertEquals(Arrays.asList("200"), testMethod.getAcceptedStatusCodes()); @@ -61,8 +61,8 @@ public void testRestelTestMethod() { testMethod.setRequestUrl("url"); Assert.assertEquals("url", testMethod.getRequestUrl()); - Assert.assertNotEquals(new RestelTestMethod(), testMethod); - Assert.assertNotEquals(testMethod.hashCode(), new RestelTestMethod().hashCode()); + Assert.assertNotEquals(new RestelTestApiDefinition(), testMethod); + Assert.assertNotEquals(testMethod.hashCode(), new RestelTestApiDefinition().hashCode()); Assert.assertNotNull(testMethod.toString()); } } diff --git a/src/test/java/restel/testng/TestCaseExecutorTest.java b/src/test/java/restel/testng/TestCaseExecutorTest.java index 841cb38..018ad0d 100644 --- a/src/test/java/restel/testng/TestCaseExecutorTest.java +++ b/src/test/java/restel/testng/TestCaseExecutorTest.java @@ -5,7 +5,7 @@ import com.techconative.restel.core.managers.RestelTestManager; import com.techconative.restel.core.model.BaseConfiguration; import com.techconative.restel.core.model.RestelSuite; -import com.techconative.restel.core.model.RestelTestMethod; +import com.techconative.restel.core.model.RestelTestApiDefinition; import com.techconative.restel.core.model.RestelTestScenario; import com.techconative.restel.core.utils.ContextUtils; import com.techconative.restel.testng.MatcherFactory; @@ -41,7 +41,7 @@ public class TestCaseExecutorTest { @Mock private MatcherFactory matcherFactory; private RestelTestScenario executionGroup = Mockito.mock(RestelTestScenario.class); - private RestelTestMethod testMethod = Mockito.mock(RestelTestMethod.class); + private RestelTestApiDefinition testMethod = Mockito.mock(RestelTestApiDefinition.class); private RestelSuite restelSuite = Mockito.mock(RestelSuite.class); private BaseConfiguration baseConfiguration = Mockito.mock(BaseConfiguration.class); From b84b7732e17b23107cb02811ed295945c8cfa848 Mon Sep 17 00:00:00 2001 From: bharathyes Date: Thu, 5 May 2022 17:04:52 +0530 Subject: [PATCH 02/17] optimize foreach to stream --- .../core/managers/ExcelParseManager.java | 39 +++++-------------- .../managers/RestelDefinitionManager.java | 3 +- .../core/managers/RestelTestManager.java | 3 +- .../restel/testng/TestCaseExecutor.java | 6 +-- .../restel/utils/RestelUtils.java | 14 ++++--- 5 files changed, 22 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java b/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java index 5906064..ae04924 100644 --- a/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java +++ b/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java @@ -22,6 +22,7 @@ public class ExcelParseManager { private String filepath; private List testMethods; + private Map testMethodMap; private List testApiWrappers; private List suites; private List execGroups; @@ -104,12 +105,12 @@ private List createTestMethod( } // Create a Map od case name and its Method definition. - Map testMethodMap = new HashMap<>(); - testApiDefinitions.forEach( - testDefinition -> - testMethodMap.put( - testDefinition.getApiUniqueName(), - RestelUtils.createTestMethod(testDefinition, baseConfig))); + testMethodMap = + testApiDefinitions.stream() + .collect( + Collectors.toMap( + TestApiDefinitions::getApiUniqueName, + x -> RestelUtils.createTestMethod(x, baseConfig))); return testApiDefinitions.stream() .map( @@ -138,29 +139,9 @@ private List createTestMethod( } private List createTestApiWrapper(List testWrappers) { - if (testWrappers.isEmpty()) { - throw new RestelException("TEST_WRAPPER_EMPTY"); - } - // is a map needed here? there is no dependsOn in TestApiWrappers so could just do with a list - Map testApiWrapperMap = new HashMap<>(); - testWrappers.forEach( - testWrapper -> { - RestelTestApiWrapper testApiWrapper = RestelUtils.createTestWrapper(testWrapper); - testMethods.forEach( // rewrite with stream filters OR find any - testMethod -> { - if (testMethod.getCaseUniqueName().equals(testWrapper.getTestApiName())) { - testApiWrapper.setTestApiDefinition(testMethod); - } - }); - testApiWrapperMap.put(testWrapper.getTestApiWrapperName(), testApiWrapper); - }); - - List restelApiWrapperList = new ArrayList<>(); - for (TestApiWrappers testWrapper : testWrappers) { - restelApiWrapperList.add(testApiWrapperMap.get(testWrapper.getTestApiWrapperName())); - } - - return restelApiWrapperList; + return testWrappers.stream() + .map(x -> RestelUtils.createTestWrapper(x, testMethodMap)) + .collect(Collectors.toList()); } /** diff --git a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java index 81154d0..dceaaa9 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java @@ -265,8 +265,7 @@ private Object getRequestBody(RestelApiDefinition restelTestMethod) { * @param restelTestMethod */ private String getRequestURL(RestelApiDefinition restelTestMethod) { - return replaceContextVariables(testContext, restelTestMethod.getRequestUrl()) - .toString(); + return replaceContextVariables(testContext, restelTestMethod.getRequestUrl()).toString(); } /** diff --git a/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java b/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java index f140af3..ba4bfc9 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java @@ -143,8 +143,7 @@ private void validateDefinition(List testMethods) { * @param testMethod {@link RestelApiDefinition} * @param childMethods list of child {@link RestelApiDefinition} for testMethod. */ - private void isCyclic( - RestelApiDefinition testMethod, List childMethods) { + private void isCyclic(RestelApiDefinition testMethod, List childMethods) { if (!CollectionUtils.isEmpty(childMethods)) { childMethods.forEach( m -> { diff --git a/src/main/java/com/techconative/restel/testng/TestCaseExecutor.java b/src/main/java/com/techconative/restel/testng/TestCaseExecutor.java index 071e1ce..ce4a1e6 100644 --- a/src/main/java/com/techconative/restel/testng/TestCaseExecutor.java +++ b/src/main/java/com/techconative/restel/testng/TestCaseExecutor.java @@ -132,8 +132,7 @@ public boolean executeTest() { // executeAssertions(); // } RestelDefinitionManager manager = - new RestelDefinitionManager( - testDefinition, requestManager, matcherFactory, testContext); + new RestelDefinitionManager(testDefinition, requestManager, matcherFactory, testContext); return manager.executeTestScenario( testExecutionDefinition.getScenarioName(), testExecutionDefinition.getTestSuiteName()); } @@ -231,8 +230,7 @@ private void validateFunctionDataPattern(String data) { * @return Check whether the definitionName is equals to given tesDefinitions or its child * testDefinitions, */ - private boolean hasDefinitionName( - RestelApiDefinition testDefinitions, String definitionName) { + private boolean hasDefinitionName(RestelApiDefinition testDefinitions, String definitionName) { if (StringUtils.equals(testDefinitions.getCaseUniqueName(), definitionName)) { return true; } else { diff --git a/src/main/java/com/techconative/restel/utils/RestelUtils.java b/src/main/java/com/techconative/restel/utils/RestelUtils.java index 00f7539..5953e81 100644 --- a/src/main/java/com/techconative/restel/utils/RestelUtils.java +++ b/src/main/java/com/techconative/restel/utils/RestelUtils.java @@ -76,16 +76,18 @@ public static RestelTestApiDefinition createTestMethod( return testMethod; } - public static RestelTestApiWrapper createTestWrapper(TestApiWrappers testWrappers) { - validate(testWrappers); + public static RestelTestApiWrapper createTestWrapper( + TestApiWrappers testWrapper, Map testMethodMap) { + validate(testWrapper); Map params = - StringUtils.isEmpty(testWrappers.getTestApiWrapperParameters()) + StringUtils.isEmpty(testWrapper.getTestApiWrapperParameters()) ? null - : ObjectMapperUtils.convertToMap(testWrappers.getTestApiWrapperParameters()); + : ObjectMapperUtils.convertToMap(testWrapper.getTestApiWrapperParameters()); RestelTestApiWrapper restelTestWrapper = new RestelTestApiWrapper(); - restelTestWrapper.setTestApiWrapperName(testWrappers.getTestApiWrapperName()); - restelTestWrapper.setTestApiWrapperDescription(testWrappers.getTestApiWrapperDescription()); + restelTestWrapper.setTestApiWrapperName(testWrapper.getTestApiWrapperName()); + restelTestWrapper.setTestApiWrapperDescription(testWrapper.getTestApiWrapperDescription()); restelTestWrapper.setTestApiWrapperParameters(params); + restelTestWrapper.setTestApiDefinition(testMethodMap.get(testWrapper.getTestApiName())); return restelTestWrapper; } From fc54c0ba371f331c65bf7c325638af8e5014a0cd Mon Sep 17 00:00:00 2001 From: bharathyes Date: Thu, 5 May 2022 18:47:32 +0530 Subject: [PATCH 03/17] api context resolution fails --- .../managers/RestelDefinitionManager.java | 41 ++++++++++++------- .../core/model/RestelApiDefinition.java | 4 ++ .../core/model/RestelTestApiDefinition.java | 11 +++++ .../core/model/RestelTestApiWrapper.java | 3 +- .../restel/core/model/TestContext.java | 6 +-- .../restel/utils/RestelUtils.java | 2 +- 6 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java index dceaaa9..bd7e2fe 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java @@ -70,6 +70,11 @@ public boolean executeTestScenario(String scenarioName, String suiteName) { private boolean executeTestMethod( String scenarioName, String suiteName, RestelApiDefinition restelTestMethod) { + + TestContext apiContext = new TestContext(restelTestMethod.getCaseUniqueName(), testContext); + if (restelTestMethod.getApiParameters() != null) { + apiContext.putAll(restelTestMethod.getApiParameters()); + } // Prepare the request object RESTRequest request = createRequest(restelTestMethod); @@ -94,12 +99,15 @@ private boolean executeTestMethod( populateResponseToContext(response, restelTestMethod, scenarioName, suiteName); // validate response status - validateStatus(response, restelTestMethod); + validateStatus(response, restelTestMethod, apiContext); // Test if the header matches as per the config List headerMatchers = getHeaderMatchers(restelTestMethod); boolean isHeaderMatched = - doMatching(headerMatchers, response.getHeaders(), getExpectedHeaders(restelTestMethod)); + doMatching( + headerMatchers, + response.getHeaders(), + getExpectedHeaders(restelTestMethod, apiContext)); log.info("Headers matched for the response of " + scenarioName + ":" + isHeaderMatched); if (!isHeaderMatched) { @@ -109,17 +117,18 @@ private boolean executeTestMethod( // Test if the body matches as per the config List responseMatchers = getResponseMatchers(restelTestMethod); boolean isBodyMatched = - doMatching(responseMatchers, response, getExpectedBody(restelTestMethod)); + doMatching(responseMatchers, response, getExpectedBody(restelTestMethod, apiContext)); log.info( "Response content matched for the response of " + scenarioName + ":" + ":" + isBodyMatched); return isBodyMatched; } - private void validateStatus(RESTResponse response, RestelApiDefinition restelTestMethod) { + private void validateStatus( + RESTResponse response, RestelApiDefinition restelTestMethod, TestContext apiContext) { List expectedStatus = (List) - replaceContextVariables(testContext, restelTestMethod.getAcceptedStatusCodes()); + replaceContextVariables(apiContext, restelTestMethod.getAcceptedStatusCodes()); if (!expectedStatus.contains(String.valueOf(response.getStatus()))) { Assert.fail( "Invalid Response Status Code: " @@ -158,28 +167,28 @@ private void validateStatus(RESTResponse response, RestelApiDefinition restelTes /** * Gets the expected body for the given test name. * - * @return The expected response object. * @param restelTestMethod + * @param apiContext + * @return The expected response object. */ - private Object getExpectedBody(RestelApiDefinition restelTestMethod) { + private Object getExpectedBody(RestelApiDefinition restelTestMethod, TestContext apiContext) { // Check if expected body is Json type if (Objects.isNull(restelTestMethod.getExpectedResponse())) { - return replaceContextVariables(testContext, restelTestMethod.getExpectedResponse()); + return replaceContextVariables(apiContext, restelTestMethod.getExpectedResponse()); } if (ObjectMapperUtils.isJSONValid(restelTestMethod.getExpectedResponse().toString())) { boolean isArray = Utils.isArray(restelTestMethod.getExpectedResponse().toString()); if (!isArray) { return replaceContextVariables( - testContext, + apiContext, ObjectMapperUtils.convertToMap(restelTestMethod.getExpectedResponse().toString())); } else { return ObjectMapperUtils.convertToArray( - replaceContextVariables(testContext, restelTestMethod.getExpectedResponse()) - .toString()); + replaceContextVariables(apiContext, restelTestMethod.getExpectedResponse()).toString()); } } - return replaceContextVariables(testContext, restelTestMethod.getExpectedResponse()); + return replaceContextVariables(apiContext, restelTestMethod.getExpectedResponse()); } /** @@ -201,14 +210,16 @@ private RESTRequest createRequest(RestelApiDefinition restelTestMethod) { /** * Gets the expected headers for the given test name. * - * @return The expected response object. * @param restelTestMethod + * @param apiContext + * @return The expected response object. */ - private Map getExpectedHeaders(RestelApiDefinition restelTestMethod) { + private Map getExpectedHeaders( + RestelApiDefinition restelTestMethod, TestContext apiContext) { if (CollectionUtils.isEmpty(restelTestMethod.getExpectedHeader())) { return null; } - return replaceContextVariables(testContext, restelTestMethod.getExpectedHeader()); + return replaceContextVariables(apiContext, restelTestMethod.getExpectedHeader()); } /** diff --git a/src/main/java/com/techconative/restel/core/model/RestelApiDefinition.java b/src/main/java/com/techconative/restel/core/model/RestelApiDefinition.java index 0db030a..c7d4853 100644 --- a/src/main/java/com/techconative/restel/core/model/RestelApiDefinition.java +++ b/src/main/java/com/techconative/restel/core/model/RestelApiDefinition.java @@ -69,5 +69,9 @@ public interface RestelApiDefinition { void setParentTests(List parentTests); + Map getApiParameters(); + + void setApiParameters(Map apiParameters); + public void addParentTest(String parentTest); } diff --git a/src/main/java/com/techconative/restel/core/model/RestelTestApiDefinition.java b/src/main/java/com/techconative/restel/core/model/RestelTestApiDefinition.java index 352ab5a..849950b 100644 --- a/src/main/java/com/techconative/restel/core/model/RestelTestApiDefinition.java +++ b/src/main/java/com/techconative/restel/core/model/RestelTestApiDefinition.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import lombok.Data; @@ -25,6 +26,16 @@ public class RestelTestApiDefinition implements RestelApiDefinition { private List dependentOn; private List parentTests = new ArrayList<>(); + @Override + public Map getApiParameters() { + return null; + } + + @Override + public void setApiParameters(Map apiParameters) { + + } + public void addParentTest(String parentTest) { parentTests.add(parentTest); } diff --git a/src/main/java/com/techconative/restel/core/model/RestelTestApiWrapper.java b/src/main/java/com/techconative/restel/core/model/RestelTestApiWrapper.java index 421e50a..2510cb7 100644 --- a/src/main/java/com/techconative/restel/core/model/RestelTestApiWrapper.java +++ b/src/main/java/com/techconative/restel/core/model/RestelTestApiWrapper.java @@ -8,10 +8,9 @@ @Data public class RestelTestApiWrapper implements RestelApiDefinition { private RestelTestApiDefinition testApiDefinition; - private String testApiWrapperName; private String testApiWrapperDescription; - private Map testApiWrapperParameters; + private Map apiParameters; @Override public String getCaseUniqueName() { diff --git a/src/main/java/com/techconative/restel/core/model/TestContext.java b/src/main/java/com/techconative/restel/core/model/TestContext.java index 55e61c4..d5227f0 100644 --- a/src/main/java/com/techconative/restel/core/model/TestContext.java +++ b/src/main/java/com/techconative/restel/core/model/TestContext.java @@ -10,12 +10,12 @@ public class TestContext extends AbstractContext { private String testName; public TestContext(String testName) { - super(GlobalContext.getInstance()); - this.testName = testName; + this(testName, GlobalContext.getInstance()); } - public TestContext(TestContext parent) { + public TestContext(String testName, AbstractContext parent) { super(parent); + this.testName = testName; } public String getTestName() { diff --git a/src/main/java/com/techconative/restel/utils/RestelUtils.java b/src/main/java/com/techconative/restel/utils/RestelUtils.java index 5953e81..2e04a18 100644 --- a/src/main/java/com/techconative/restel/utils/RestelUtils.java +++ b/src/main/java/com/techconative/restel/utils/RestelUtils.java @@ -86,8 +86,8 @@ public static RestelTestApiWrapper createTestWrapper( RestelTestApiWrapper restelTestWrapper = new RestelTestApiWrapper(); restelTestWrapper.setTestApiWrapperName(testWrapper.getTestApiWrapperName()); restelTestWrapper.setTestApiWrapperDescription(testWrapper.getTestApiWrapperDescription()); - restelTestWrapper.setTestApiWrapperParameters(params); restelTestWrapper.setTestApiDefinition(testMethodMap.get(testWrapper.getTestApiName())); + restelTestWrapper.setApiParameters(params); return restelTestWrapper; } From dc4c2c8591b04f18eac13bca9efdc32c22038fc1 Mon Sep 17 00:00:00 2001 From: bharathyes Date: Fri, 6 May 2022 10:38:24 +0530 Subject: [PATCH 04/17] add xlsx for wrappers testing --- quickstart/jsonbox_test_api_just_wrapper.xlsx | Bin 41570 -> 41209 bytes quickstart/jsonbox_test_api_wrapper.xlsx | Bin 0 -> 41571 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 quickstart/jsonbox_test_api_wrapper.xlsx diff --git a/quickstart/jsonbox_test_api_just_wrapper.xlsx b/quickstart/jsonbox_test_api_just_wrapper.xlsx index a6e1f460ff8e2f09c1aba5204a50623f9d658653..a65ab79d6db500adfdab818fd13528616bf3bbf2 100644 GIT binary patch literal 41209 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 P9}Hf-pfDXL_)mWW^QyE{ delta 16807 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%0AJ-A6zcJ&o5(>i&gYgRrT^(Vp>}G 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 Date: Mon, 9 May 2022 14:14:13 +0530 Subject: [PATCH 05/17] excel expected response --- quickstart/jsonbox_test_api_wrapper.xlsx | Bin 41571 -> 41660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/quickstart/jsonbox_test_api_wrapper.xlsx b/quickstart/jsonbox_test_api_wrapper.xlsx index 6bfcb49e338976ac218613e6175c14e4d7b3727c..2e85ff5d9a1219ca295ce51b2619840eb92e9d52 100644 GIT binary patch delta 18989 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 J&iQWG{{#3C%qIW< delta 15650 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 Date: Mon, 9 May 2022 15:08:24 +0530 Subject: [PATCH 06/17] custom string equals comparator --- .../comparator/PartialJsonMatchComparator.java | 2 +- .../model/comparator/StringJsonComparator.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/techconative/restel/core/model/comparator/StringJsonComparator.java diff --git a/src/main/java/com/techconative/restel/core/model/comparator/PartialJsonMatchComparator.java b/src/main/java/com/techconative/restel/core/model/comparator/PartialJsonMatchComparator.java index f2aedb9..d339de5 100644 --- a/src/main/java/com/techconative/restel/core/model/comparator/PartialJsonMatchComparator.java +++ b/src/main/java/com/techconative/restel/core/model/comparator/PartialJsonMatchComparator.java @@ -42,6 +42,6 @@ private void evalJson(Object restResponse, Object expectedOutput) { + " Expected :- " + expectedOutputnode.toPrettyString()); // First pass the expectedOutput(which is partial response) then actual in JsonCompare. - JSONCompare.assertEquals(expectedOutputnode, actualOutputNode); + JSONCompare.assertEquals(expectedOutputnode, actualOutputNode, new StringJsonComparator()); } } diff --git a/src/main/java/com/techconative/restel/core/model/comparator/StringJsonComparator.java b/src/main/java/com/techconative/restel/core/model/comparator/StringJsonComparator.java new file mode 100644 index 0000000..9b5c4af --- /dev/null +++ b/src/main/java/com/techconative/restel/core/model/comparator/StringJsonComparator.java @@ -0,0 +1,15 @@ +package com.techconative.restel.core.model.comparator; + +import ro.skyah.comparator.JsonComparator; + +public class StringJsonComparator implements JsonComparator { + @Override + public boolean compareValues(Object expected, Object actual) { + return expected.equals(actual); + } + + @Override + public boolean compareFields(String expected, String actual) { + return expected.equals(actual); + } +} From f89458f6d308f7bb232946570016f4e7526a556a Mon Sep 17 00:00:00 2001 From: bharathyes Date: Mon, 9 May 2022 16:36:16 +0530 Subject: [PATCH 07/17] handle wrapper sheet as optional feature --- quickstart/jsonbox_test.xlsx | Bin 39557 -> 39975 bytes .../core/managers/ExcelParseManager.java | 4 +++- .../core/managers/RestelTestManager.java | 7 +++++-- .../comparator/ExactMatchComparator.java | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/quickstart/jsonbox_test.xlsx b/quickstart/jsonbox_test.xlsx index 404530f0a8ed6caf9cfc15c923f7e30a7b1840d4..c60a2ad7d83cf5ab99000091c76f4c710748fb51 100644 GIT binary patch literal 39975 zcmeFa30MB-+#mNP__21T5qlW?zLA{ z_Nwe$hHcs`EwpXhHld))d6q(d@h1w%&H*02foiI2+k&L`rbPAacUa-~jx3#^p4yiA zvc~vQ&Hm%^?+zjMmB(c@M$avtlak#2poEyzNEjG)r&sN=Gqt&_>B_?Lj~C|1I=OU1IhbCJ{cKjp>uU=C3kq-5eXgi zh^QjbSdYc_Y*)WzB7xgKHvMULCm~@!?=fle=~Jods<8k+*ZHk2wUROFUP0j|2O};S zPvdvVX*wIl+of|!V^Wu4!rN{?KmL3gAfa`mkkIA7OOrTo#!X)}6f)q3D-wA_^(Nf+ zK{6$wUw!8t)~fU))_!5JE$3{CZ(X;ZG8CoOoio+gubLo7_Pk{kv1BS+0=pU$_NZ~u zxc(VOU$agZI}o}h=b7~W*&2EOQ`s7BuKSW$^h(VG30ju!k6|13pS-1nDi!aHwyZh# zB`sPYDwp)(sn2jV1e}pwee~$g>z{LumuoMGH3SAH>%&XQP9)WnLvftl{X6K^_i(` zAI-NkY(4AR#h2Y7bpll9Y1@6K!21P-I3g0TT;6;+R7|6E{$>P_xbQGL%uZQqtk(&j26#wudVh|auNfl=HDJP-)VU))NqoT zF<)ptwu=J#%`1xRS$%B*S+vzE-|Dy8Ptv-gN6jY`KG&V{=h?xxaJ-)FcTJE?Vq~%N_;dFue>7KKK4-%3KP)Ry{$#Dp=y%i955$BT-)e(*N#dnJ3pgZu39#x*dP=y1<}NUyr~wpJUqFC#L8~N79^c>2(+|u@5O< z%M4$8hgcMp*^C){Gc-UK@5IOekV{(CBVadlUbW2ysoZd1vRG+C>)a)q zj!h;Xf0I5C38%#Ed$CQa(B}Rt+1Wjb84q!KMafSOPAGmkd?19-xu;*EQQG)I(4Lk9 zk8D)!&5v!Zb8w#|I;S^kF*d57UA4g1kqeU{@bP~wMTn( zH{6Il-w#bw9tJI(I?(%To<`G`Tli+*(V|e<@g`Qr_htDsPi*CM(d6kT`;0H;1s!?s zE`4_Y&Roq<7kKM9-Np)ZM6@a-c}hQ1&aX10I-0mc@whS@j+&n>4 zo1R_R!%_$J>Cf;ZDdR%!2S`NqYtl(IH@BlNNp22kS77XGiAk0?UH{NUN9;_nG|1}u z)19CsoFD5P(P)I zM>{H1cbQ#KwLJAuy)Ed>MApfx ztIJOsMC-OqJnL&K$Wv?YfhJTCS>Ncl3u`R#2cp5>li4?T9g z;s;w)6fQ5d#%j3rjPCKbf<52Se>^-chiu@^|GkWkEgRE+Cb~Q2yv-*0XU3sz*F`+c zMs29*lRG{YhxLqp`*tXQ=AFCoQHqi+kEQYa>$AyF&w$u={Ro8{zACyIi%XP#jKjV1 zlu_H-#1pyq$SIgByXqf&5?nd4c}reSeazlyOjqoa>{I=&adGb~oyj#@Eq0$*??i1? zj2?8_L=PN?A&!Ig>`*vi7m)C(rWLLV)8Z+RAGr;Hc3~bJ2gO zq9$M8n8p=eizgF9ad&nBv7}Y^AH|b{|9%$>yzb!<6sY#6TmR3(v9$p6^C93tTd~N- zW81fWr{*3epSXJZTy5Z$_wUcoZ!l6rfqQQl*`KEks@{u=c3VzX=(yzMP zjh0>?Of{@}x9ok2=W*|>#c93c7CXl;W?*~~_W9nV70AOjs8fcDc~H;NmaD~CTu-?h zquX<9pTksUpD0wR6rz@l+m8y{+#9iGul%w`!~yx3*-D_9>KpzM5z_w_Sg*STc(_{x z1$ZO8e#Td-wTT5qeP`X0^>v3kQjNbn+pst3+o?{hnBtyGZF|oTUX!ucz#1pJEVCRb z{@eC@SjmRZ;ugKFk=ADP=}Emf@+Nnsj@RSmdrcB=B|+|X!P{0(aH=tkV{W%a&b`?+ zU%Ta3R+%94#(j@%S6`0b?s+Lk)7FSN_w7h@?UU5asa)EvGgsZ7wooC>&3T zjXZE*^jKb?NBE#bSj*KQJTY`(sAzPdMrjHKQ

    iL3YDy@|Z(X2heH4sn~S>zOFt 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
    fq>y`*W+Rf3};}{ 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 P-}!)WF)&Hx%>eNLDmVM$ literal 39557 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 diff --git a/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java b/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java index ae04924..a7e4d15 100644 --- a/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java +++ b/src/main/java/com/techconative/restel/core/managers/ExcelParseManager.java @@ -63,7 +63,9 @@ private void init() { (BaseConfig) excelData.get(ParserEnums.BASE_CONFIG.toString().toLowerCase())); testMethods = createTestMethod(testDefs, baseConfig); - testApiWrappers = createTestApiWrapper(testWrappers); + if ((testWrappers != null) && !testWrappers.isEmpty()) { + testApiWrappers = createTestApiWrapper(testWrappers); + } suites = createSuites(testSuites); execGroups = createExecGroups(testSuiteExecutions); } diff --git a/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java b/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java index ba4bfc9..be16dc0 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelTestManager.java @@ -46,8 +46,11 @@ private void configure() { for (RestelApiDefinition testMethod : excelParseManager.getTestMethods()) { indexedTestDefinitions.put(testMethod.getCaseUniqueName(), testMethod); } - for (RestelApiDefinition testApiWrapper : excelParseManager.getTestApiWrappers()) { - indexedTestDefinitions.put(testApiWrapper.getCaseUniqueName(), testApiWrapper); + List testApiWrappers = excelParseManager.getTestApiWrappers(); + if (testApiWrappers != null) { + for (RestelApiDefinition testApiWrapper : testApiWrappers) { + indexedTestDefinitions.put(testApiWrapper.getCaseUniqueName(), testApiWrapper); + } } for (RestelSuite suite : excelParseManager.getSuites()) { indexedTestSuites.put(suite.getSuiteName(), suite); diff --git a/src/main/java/com/techconative/restel/core/model/comparator/ExactMatchComparator.java b/src/main/java/com/techconative/restel/core/model/comparator/ExactMatchComparator.java index d532318..fa09ad1 100644 --- a/src/main/java/com/techconative/restel/core/model/comparator/ExactMatchComparator.java +++ b/src/main/java/com/techconative/restel/core/model/comparator/ExactMatchComparator.java @@ -68,6 +68,7 @@ private void evalJson(Object restResponse, Object expectedOutput) { JSONCompare.assertEquals( expectedOutputnode, actualOutputNode, + new StringJsonComparator(), CompareMode.JSON_OBJECT_NON_EXTENSIBLE, CompareMode.JSON_ARRAY_STRICT_ORDER); } From e2f988d499afca67bcd328901fe015b19880dacf Mon Sep 17 00:00:00 2001 From: bharathyes Date: Tue, 10 May 2022 11:16:42 +0530 Subject: [PATCH 08/17] add test for apiwrapper and custom string comparator --- .../manager/RestelDefinitionManagerTest.java | 1 + .../core/model/RestelTestWrapperTest.java | 31 +++++++++++++++++ .../StringJsonMatchComparatorTest.java | 30 +++++++++++++++++ .../core/parser/dto/TestWrappersTest.java | 33 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 src/test/java/restel/core/model/RestelTestWrapperTest.java create mode 100644 src/test/java/restel/core/model/comparators/StringJsonMatchComparatorTest.java create mode 100644 src/test/java/restel/core/parser/dto/TestWrappersTest.java diff --git a/src/test/java/restel/core/manager/RestelDefinitionManagerTest.java b/src/test/java/restel/core/manager/RestelDefinitionManagerTest.java index 8d593a0..5a86702 100644 --- a/src/test/java/restel/core/manager/RestelDefinitionManagerTest.java +++ b/src/test/java/restel/core/manager/RestelDefinitionManagerTest.java @@ -6,6 +6,7 @@ import com.techconative.restel.core.http.ResponseBody; import com.techconative.restel.core.managers.RequestManager; import com.techconative.restel.core.managers.RestelDefinitionManager; +import com.techconative.restel.core.model.GlobalContext; import com.techconative.restel.core.model.RestelTestApiDefinition; import com.techconative.restel.core.model.TestContext; import com.techconative.restel.core.model.comparator.ExactMatchComparator; diff --git a/src/test/java/restel/core/model/RestelTestWrapperTest.java b/src/test/java/restel/core/model/RestelTestWrapperTest.java new file mode 100644 index 0000000..d127c01 --- /dev/null +++ b/src/test/java/restel/core/model/RestelTestWrapperTest.java @@ -0,0 +1,31 @@ +package restel.core.model; + +import com.techconative.restel.core.model.RestelTestApiDefinition; +import com.techconative.restel.core.model.RestelTestApiWrapper; +import java.util.Map; +import org.junit.Assert; +import org.junit.Test; + +public class RestelTestWrapperTest { + @Test + public void testRestelTestMethod() { + RestelTestApiWrapper restelTestWrapper = new RestelTestApiWrapper(); + + restelTestWrapper.setTestApiDefinition(new RestelTestApiDefinition()); + Assert.assertEquals(new RestelTestApiDefinition(), restelTestWrapper.getTestApiDefinition()); + + restelTestWrapper.setTestApiWrapperName("testApiWrapperName"); + Assert.assertEquals("testApiWrapperName", restelTestWrapper.getCaseUniqueName()); + + restelTestWrapper.setTestApiWrapperDescription("a read test that returns 500 status code"); + Assert.assertEquals( + "a read test that returns 500 status code", restelTestWrapper.getCaseDescription()); + + restelTestWrapper.setApiParameters(Map.of("param1", "param2")); + Assert.assertEquals(Map.of("param1", "param2"), restelTestWrapper.getApiParameters()); + + Assert.assertNotEquals(new RestelTestWrapperTest(), restelTestWrapper); + Assert.assertNotEquals(restelTestWrapper.hashCode(), new RestelTestWrapperTest().hashCode()); + Assert.assertNotNull(restelTestWrapper.toString()); + } +} diff --git a/src/test/java/restel/core/model/comparators/StringJsonMatchComparatorTest.java b/src/test/java/restel/core/model/comparators/StringJsonMatchComparatorTest.java new file mode 100644 index 0000000..f1b5204 --- /dev/null +++ b/src/test/java/restel/core/model/comparators/StringJsonMatchComparatorTest.java @@ -0,0 +1,30 @@ +package restel.core.model.comparators; + +import com.techconative.restel.core.model.comparator.StringJsonComparator; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class StringJsonMatchComparatorTest { + + private StringJsonComparator comparator; + + @Before + public void setup() { + comparator = new StringJsonComparator(); + } + + @Test + public void testCompareFields() { + Assert.assertTrue( + comparator.compareFields( + "([A-Z][A-Z0-9]*)\\b[^>]*>(.*?)]*>(.*?)]*>(.*?)]*>(.*?) Date: Tue, 10 May 2022 19:21:56 +0530 Subject: [PATCH 09/17] Changes to add the request resposne to the test api. Remoevd unused code --- .../managers/RestelDefinitionManager.java | 129 +++--------------- .../core/model/RestelTestWrapperTest.java | 4 +- 2 files changed, 19 insertions(+), 114 deletions(-) diff --git a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java index 0d8e908..1db53df 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java @@ -26,7 +26,6 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import org.testng.Assert; -import org.testng.collections.Maps; /** */ @Slf4j @@ -82,7 +81,7 @@ private boolean executeTestMethod( // Populate the request to context, so that it can be referenced in // other test - populateRequestToContext(request, scenarioName, suiteName, restelTestMethod); + populateRequestToContext(apiContext, request); // Make the API call and get the response RESTResponse response = @@ -96,7 +95,7 @@ private boolean executeTestMethod( // Populate the response to context, so that it can be referenced in // other test - populateResponseToContext(response, restelTestMethod, scenarioName, suiteName); + populateResponseToContext(apiContext, response); // validate response status validateStatus(response, restelTestMethod, apiContext); @@ -137,33 +136,6 @@ private void validateStatus( } } - // /** - // * @param scenarioName Test scenario name - // * @param suiteName Test suite name - // */ - // private void executeDependents(String scenarioName, String suiteName) { - // if (testDefinition.getDependentOn() != null) { - // testDefinition - // .getDependentOn() - // .forEach( - // testcase -> { - // // pass on the same textContext so that request and response body can be stored - // and - // // reused. - // RestelDefinitionManager manager = - // new RestelDefinitionManager( - // testcase, requestManager, matcherFactory, testContext); - // if (!manager.executeTestScenario(scenarioName, suiteName)) { - // Allure.step( - // "Execution failed for testcase: " - // + scenarioName - // + " for dependent case: " - // + testcase.getCaseUniqueName()); - // } - // }); - // } - // } - /** * Gets the expected body for the given test name. * @@ -282,8 +254,8 @@ private String getRequestURL(RestelApiDefinition restelTestMethod) { /** * Get the list of matchers that does the response body matching. * - * @return List of {@link ResponseComparator} instances for the given test name. * @param restelTestMethod + * @return List of {@link ResponseComparator} instances for the given test name. */ private List getResponseMatchers(RestelApiDefinition restelTestMethod) { return Collections.singletonList(getMatcher(restelTestMethod.getExpectedResponseMatcher())); @@ -329,8 +301,8 @@ private boolean doMatching( /** * Gets the list of header matchers as configured in the test. * + * @param restelTestMethod The method to get headers for. * @return The list of matchers for the header as configured in the test. - * @param restelTestMethod */ private List getHeaderMatchers(RestelApiDefinition restelTestMethod) { return Collections.singletonList(getMatcher(restelTestMethod.getExpectedHeaderMatcher())); @@ -339,85 +311,22 @@ private List getHeaderMatchers(RestelApiDefinition restelTes /** * Populates the given response to the context. * + * @param apiContext The context to which the response to be populated. Typically, the test api + * context. * @param response The response object to be populated to the context. - * @param restelTestMethod */ - private void populateResponseToContext( - RESTResponse response, - RestelApiDefinition restelTestMethod, - String testName, - String suiteName) { + private void populateResponseToContext(TestContext apiContext, RESTResponse response) { if (response.getResponse() != null) { if (!Objects.isNull(response.getResponse().getBody())) { if (StringUtils.isNotEmpty(response.getResponse().getBody().toString())) { - Map updatedContext = - getResponseUpdatedContext(response, restelTestMethod); - testContext.addValue(restelTestMethod.getApiUniqueName(), updatedContext); - } - } - } - } - private Map getResponseUpdatedContext( - RESTResponse response, RestelApiDefinition restelTestMethod) { - Map existingContextMap; - Object body = response.getResponse().getBody(); - Object existingContextVal = testContext.resolveValue(restelTestMethod.getApiUniqueName()); - if (existingContextVal != null) { - existingContextMap = Maps.newHashMap((Map) existingContextVal); - if (ObjectMapperUtils.isJSONValid(body.toString())) { - existingContextMap.put(Constants.RESPONSE, ObjectMapperUtils.convertToMap(body.toString())); - } else { - existingContextMap.put(Constants.RESPONSE, body); - } - } else { - if (ObjectMapperUtils.isJSONValid(body.toString())) { - body = - Utils.isArray(body.toString()) - ? ObjectMapperUtils.convertToArray(body.toString()) - : ObjectMapperUtils.convertToMap(body.toString()); + Object opToStore = response.getResponse().getBody(); + if (ObjectMapperUtils.isJSONValid(opToStore.toString())) { + opToStore = ObjectMapperUtils.convertToMap(opToStore.toString()); + } + apiContext.addValue(Constants.RESPONSE, opToStore); + } } - existingContextMap = Maps.newHashMap(Map.of(Constants.RESPONSE, body)); - } - return existingContextMap; - } - - /** - * @param suiteName Test suite name. - * @param scenarioName Test suite execution name. - * @param testName test definition name. - * @param response response body - */ - private void addToGlobalContext( - String suiteName, String scenarioName, String testName, Map response) { - GlobalContext globalContext = GlobalContext.getInstance(); - Map testValue = Maps.newHashMap(Map.of(testName, response)); - Object scenarioContext = globalContext.getContextValues().get(scenarioName); - if (Objects.isNull(scenarioContext)) { - scenarioContext = new HashMap<>(); - } - - // If the testName params are already present for child test include the parent testDefinition - // params in to the List. - Map testRes = (Map) scenarioContext; - testRes.put(testName, response); - globalContext.addValue(scenarioName, testRes); - - if (Objects.isNull(globalContext.getContextValues().get(suiteName))) { - globalContext.addValue( - suiteName, - new ArrayList<>( - Collections.singletonList( - Maps.newHashMap( - Map.of(scenarioName, globalContext.getContextValues().get(scenarioName)))))); - } else { - // If suite param are already present for child testName include additional params from parent - // testName. - List> suiteRes = (List) globalContext.getContextValues().get(suiteName); - suiteRes.add( - Maps.newHashMap( - Map.of(scenarioName, globalContext.getContextValues().get(scenarioName)))); - globalContext.addValue(suiteName, suiteRes); } } @@ -481,17 +390,13 @@ private List getPreRequestMiddlewares(RestelApiDefinition res /** * Populates the request to the context for the given test name * + * @param apiContext The context to which the response to be populated. Typically, the test api * + * context. * @param request The request for the given test. - * @param restelTestMethod */ - private void populateRequestToContext( - RESTRequest request, - String testName, - String suiteName, - RestelApiDefinition restelTestMethod) { + private void populateRequestToContext(TestContext apiContext, RESTRequest request) { if (request.getRequestBody() != null) { - Map reqMap = Map.of(Constants.REQUEST, request.getRequestBody()); - testContext.addValue(restelTestMethod.getApiUniqueName(), reqMap); + apiContext.addValue(Constants.REQUEST, request.getRequestBody()); } } } diff --git a/src/test/java/restel/core/model/RestelTestWrapperTest.java b/src/test/java/restel/core/model/RestelTestWrapperTest.java index d127c01..8a85026 100644 --- a/src/test/java/restel/core/model/RestelTestWrapperTest.java +++ b/src/test/java/restel/core/model/RestelTestWrapperTest.java @@ -15,11 +15,11 @@ public void testRestelTestMethod() { Assert.assertEquals(new RestelTestApiDefinition(), restelTestWrapper.getTestApiDefinition()); restelTestWrapper.setTestApiWrapperName("testApiWrapperName"); - Assert.assertEquals("testApiWrapperName", restelTestWrapper.getCaseUniqueName()); + Assert.assertEquals("testApiWrapperName", restelTestWrapper.getApiUniqueName()); restelTestWrapper.setTestApiWrapperDescription("a read test that returns 500 status code"); Assert.assertEquals( - "a read test that returns 500 status code", restelTestWrapper.getCaseDescription()); + "a read test that returns 500 status code", restelTestWrapper.getApiDescription()); restelTestWrapper.setApiParameters(Map.of("param1", "param2")); Assert.assertEquals(Map.of("param1", "param2"), restelTestWrapper.getApiParameters()); From b05320c1ae88db71c2434b410380428e1a552d0c Mon Sep 17 00:00:00 2001 From: bharathyes Date: Tue, 10 May 2022 19:33:23 +0530 Subject: [PATCH 10/17] add demo and integration test sheets with wrapper --- quickstart/jsonbox_test.xlsx | Bin 39975 -> 45417 bytes quickstart/jsonbox_test_api_just_wrapper.xlsx | Bin 41209 -> 0 bytes quickstart/jsonbox_test_api_wrapper.xlsx | Bin 41660 -> 0 bytes src/test/resources/jsonbox_test.xlsx | Bin 39557 -> 46039 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 quickstart/jsonbox_test_api_just_wrapper.xlsx delete mode 100644 quickstart/jsonbox_test_api_wrapper.xlsx diff --git a/quickstart/jsonbox_test.xlsx b/quickstart/jsonbox_test.xlsx index c60a2ad7d83cf5ab99000091c76f4c710748fb51..ce9efa5af6fcd5edd2458beba8ed9256ed86683c 100644 GIT binary patch literal 45417 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
    6EaKE~)tIl(}!)-njUt zp^R0r_1icvpWHCL?X*&iTB?>vbJb(;Q(HGqt6x7l^5vW0kk!XUo_$ns=vGkjg!Hmw#DhXL*BG38&MU5tP%Nd2#1k>N!+!PhkE<6qFX-`&l~mXB1V0m{KfL1% zF8y-KeHl_yK-3+V0~<5hTONPi6~Nc|Ve2!?_jydl3PZC@!6P$!!4JLFJDao%i_Yrw zx^3dqufjcz|IXYdJss1dsFcIvdhP!D(vj-|XBP)l-DZl4a~$4C_}ewIVRX;TPL=a| zeDM0%^<2bQo|-2%e}8nk$bsWX;U4`iFS7|ncvo>?mZGC zBE!i_lS+GDf;-6dnMu{iCdR^%H7P?{+&Q36X*|oq2GdqcLw%kIGxrl zeo6b_$!h5b2hOOZ8as{dICzG+?_AfTm&Zz5Xip_OR=XYEdZq<8B<6Lkg`GI@emC3b zU?gdwI{<^7U##rFj!){6$8>S?gBbTz*U{WaQujQT{ED25%_^8_!}7IEV-^ZAu(%tpY2PRY_7++bu57`;t0~S=fJga|v9S-$ov-Kd1hTD3!SL zoYwFhsb5{tf2KaJrSjZ-R;=!hoz9V6DXeoU1w;9x_jJ25+ae-80y-X=cO-V;Gz>dl z0L!`svFU!9pWmK!kA0o_*;`1!&N?_?-gQ9(J2L@(VlLnBG9OLqsvK)CT#S0&u8=s!)Cg8eJ+2#dU?UA5sM52>NgpasEPSHKH5GE8%4Yhjq3pYd zKMqMfZZ(NLzUpxN`-kU!-PLAY>fLpGUH0~$dmzjxKl+LtBe*7KeE3^R$GwN9zKU(L zU~PCp5b{nOzOy^y=zsd6>%f;vxmyIS>hQhQTO)JE1usU4t6uLrf3!G`uu#7B#~0={ zQAYWP1K`i~&?Dux>}c^5&F7Dvc@5_61Cfc@|B8?&5=dBW1|+;99QvUE4FD@{{|^mG zr@qV?Z$F>I6ytaLVoZ+RDaYIIfJ>JguP&+Dv}D|Ks&OKSak1y^`@E=jv{r?K%!U3@ zAHM5XVds4%>%*tdIxEgwS!836Btt)1tErR4mnNU1Y9=gc4#!^WjMTbShTC(Q#Zdz<nx>OKRSn|PR;nm&fA@NO2E6JM$+iA!RCGn8q< zHPpZ3nK)hu25Twv>ev2e^~0?uh#{{IUhm5~3vx7mnreQ;k{+fd^OpdmxD+BEs$_|! zuWWVop+R(pj>JZpkJ@7-#X= zVU>tVg{jpN0~ar=2VS~$m{=8cdQpEt|1p>J;~!)6yfSq`8xsymzdj%AXsR3?VWeg( zt!$i=cPfl=lC$ujY~aDV9#)pe@%us+H<>vFAFMaoH{bLj>4LhkpfvN~7=49IoryqV z8s{rp?e^!|KF)zqFterV@kM_IB}IY68cvV%6CnX(xHtE8OwZ!J?JO3XdhGcV*`RAlI16cPS?O-u3wtA)G^vN>VwS+NFZPYyS(}>%|?mJ|IOHHK%6odnEnQ z-|ab9MSe^Ra~bD{QhTT8+!bvxEqls1_3;H&L1&HJ7zfp6&J%;T`_{B7<>WsvhoXYu==4jIeT&+1D$$4Z1m&kqN&ex6SS)az4YIkTMCZfn9b1T}FlbM%7?5oh>nRqrN1l->bQ_EOY3)|FtL$oljiOI3*Pcw0 ze!vALSHyan2knt%%vC*}YxcaIvm~&Hz+7dc5q}I?=l`<_@Vo@=n8aL-e z9Ogt)o*qlDdiKYF^p#37UuNZ2(a5R@XW{MDN)NQdfwm}(_zS4EGwByzKy822pA7Pi zC+{te?Q3kY_H|V>y~tbl3U%y-`EzB|vCH)*lTgPhUVEB9Mjcb3n>+|Ca`1ntpH4Fw z8E%IE#F^mvgc*R;E%}>6qyVPaHTmZ2dI9^SCoR}A&d!d!cumR3=`l8YxhxG+tt~<) z=KS&{<4fdBwR!83QAhGL;&o69-O?}M&?Ky~cz&A_;IAv|aH$YeXN?O|f%Jo41?*Fw zv;?5i4T1C=MF1lfb-KrgPE1Mqgd3U}^VX%UHVb_EG`*_)j{)+r#(vSMsh59rFg2^w zO&&TS90cN0r4et6YJHi0p%&G8(c<}QRBOi9liIQ%tw5M1@1+c2Xyc-qh9+G)FPhiP zZLc-agjn;|WkOx=)2qJyVGhQI+z;_4d$I&05ewC#Q#p+0Fnim87P{m*@1-2n^#P4| zd(?=g^b5nN5xEx6+fgID8cr5NBkT|Hrg(-1?~zXXB#~mW&q?Y@Jo&|fNnhjSR5D{< zqsczmm9!@=H_0ip=GKh=F(4Qs$)4NZu5yL@hSXG(7U>B`$(6u?#>Wxcl_E>aPpDZF z4+=6JTUXgD9MqJ5Td3DbQoKoITP42iV6NCJf9-y!Et3g?xrm6~fp6|ZZ?m<-L;BKz zMDFzjyi}NGAozq>vKUb{9;h-WnVp|dBKN~7$+ZndZoxJ4mwmv8m@lb3G0D@X2O2U^V*Vtq6VCjj#LgdmAd;bZnMIP)%yG8-vx5c z)CI|j3->xDJ;<4>A8j6%j%5vV;i$hSqMUz&t9~K;5|9RG>8=y9Gizwc^?fHPnPOtM zxak;HM5TOOgTp?5ABaizJB#vhXNQ`|uI(xDp|}?Vms15)z55!sr@RWq#SKg)3rLTM zq)ZkkyzV8w_I1)3yqBqxe?z-|!A&L8_i+fIC_Wu^A*@M#l7VsH$nN>Bbd}oa%ZSC& zScjQ`gX%BiZfh3%mfwkJkf}tm)9;itkq5CO`sA;Jb&E(!m=F?l*5Q%lgO!zXlQL7f zEr5~=Nqqak%dv`$sS|l$`{$FsKJA+viede%s#SV0UyR~B3a4?6ekT-8ed#shD4bw$ zP&iRdus8x-+qCiD>4^#G**Y(pp~NbyA8-OxRyw-`|*0phV8aM*AoNZ@sf zX<>l1e{tk5vHdJ^70s_2ek@6ol0c{#jeVaQ8r`2fV-$xGK?S+2p@#gQ^vM1zPXDZB zkfIrGLI0yl0%Jg|O!j4KD%1hQUBYiGsJsWdnl_&OnU0UMR7Zx41b4q@GUX(!H$WtG0Ju^?A+nkVL|E#?^&Nd&36|Wi>@1%H zf-n&n&y#^1kQVYD(3WseooGfC%9pAa07~8lRjiH(PD~2{wB?DAtKZt@A?Dx((o0Aru-= z`SF{l87W9LUnypRR!1TQsuiN}k80=qUo3=Sps>jQ!4nh+w#YtU4Wb32as$G5|0hpB zMe|Q)A+A9DP`#&m`tPU%YXOXqW-kH>&0joOe*NzR>6f*C@#J@T{5QvHIFCReAx#UU zAZCRB|7V{#OSg^ZMTCE!Rg2~Z{eYOm3#6JN+M0hUICLBqXa-W|g4ZS!_JxS9(;RZs zsZ@Bfn*MfTT0+o3B6 zx_rF(C&US(``d10pG`(!w<^q#{8AeI;eHXHj0`|eGkE(4kC|qx;iT) zQ~Z`Xi9dVv4;op)w)TQrSioPj(?tc!Gmhthuq+Y$f0Tej=l_OqNvGkFBaQ=7GOzsG z;Aw-WAY@}exj6)O?J^qJUe19j1`Jy8~?T&;&6&0qp-kRYU_D zWH?K18#Cj_6`c0|ZL?BH7vk{-aV2d1?$s#0{MiK1@W_||pgWw`Ci;N37wII#FDMEi z4gbf7t%&cn{`o42a)F(9oN@G-x~%6UODA@_B&daOx|!+0u6C>|6-5&N|-nTn!Rzdt%3_7#veBtc(+oNOeK z`CnEKs0OKs1!)$`NYFXMLj|~{aB)!$;nayIGQ{gjmJZD}qNdc}^4OCwGyu*RwCHK2 z&mKMKAbkyNLr@z9D+llX%z0vXHY(w4K?!Fh&*ANzkt@9eyI@zqN£(i6ia^1j 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 RSQ(y13k71iArpM}e*iQlJ1hVI literal 39975 zcmeFa30MB-+#mNP__21T5qlW?zLA{ z_Nwe$hHcs`EwpXhHld))d6q(d@h1w%&H*02foiI2+k&L`rbPAacUa-~jx3#^p4yiA zvc~vQ&Hm%^?+zjMmB(c@M$avtlak#2poEyzNEjG)r&sN=Gqt&_>B_?Lj~C|1I=OU1IhbCJ{cKjp>uU=C3kq-5eXgi zh^QjbSdYc_Y*)WzB7xgKHvMULCm~@!?=fle=~Jods<8k+*ZHk2wUROFUP0j|2O};S zPvdvVX*wIl+of|!V^Wu4!rN{?KmL3gAfa`mkkIA7OOrTo#!X)}6f)q3D-wA_^(Nf+ zK{6$wUw!8t)~fU))_!5JE$3{CZ(X;ZG8CoOoio+gubLo7_Pk{kv1BS+0=pU$_NZ~u zxc(VOU$agZI}o}h=b7~W*&2EOQ`s7BuKSW$^h(VG30ju!k6|13pS-1nDi!aHwyZh# zB`sPYDwp)(sn2jV1e}pwee~$g>z{LumuoMGH3SAH>%&XQP9)WnLvftl{X6K^_i(` zAI-NkY(4AR#h2Y7bpll9Y1@6K!21P-I3g0TT;6;+R7|6E{$>P_xbQGL%uZQqtk(&j26#wudVh|auNfl=HDJP-)VU))NqoT zF<)ptwu=J#%`1xRS$%B*S+vzE-|Dy8Ptv-gN6jY`KG&V{=h?xxaJ-)FcTJE?Vq~%N_;dFue>7KKK4-%3KP)Ry{$#Dp=y%i955$BT-)e(*N#dnJ3pgZu39#x*dP=y1<}NUyr~wpJUqFC#L8~N79^c>2(+|u@5O< z%M4$8hgcMp*^C){Gc-UK@5IOekV{(CBVadlUbW2ysoZd1vRG+C>)a)q zj!h;Xf0I5C38%#Ed$CQa(B}Rt+1Wjb84q!KMafSOPAGmkd?19-xu;*EQQG)I(4Lk9 zk8D)!&5v!Zb8w#|I;S^kF*d57UA4g1kqeU{@bP~wMTn( zH{6Il-w#bw9tJI(I?(%To<`G`Tli+*(V|e<@g`Qr_htDsPi*CM(d6kT`;0H;1s!?s zE`4_Y&Roq<7kKM9-Np)ZM6@a-c}hQ1&aX10I-0mc@whS@j+&n>4 zo1R_R!%_$J>Cf;ZDdR%!2S`NqYtl(IH@BlNNp22kS77XGiAk0?UH{NUN9;_nG|1}u z)19CsoFD5P(P)I zM>{H1cbQ#KwLJAuy)Ed>MApfx ztIJOsMC-OqJnL&K$Wv?YfhJTCS>Ncl3u`R#2cp5>li4?T9g z;s;w)6fQ5d#%j3rjPCKbf<52Se>^-chiu@^|GkWkEgRE+Cb~Q2yv-*0XU3sz*F`+c zMs29*lRG{YhxLqp`*tXQ=AFCoQHqi+kEQYa>$AyF&w$u={Ro8{zACyIi%XP#jKjV1 zlu_H-#1pyq$SIgByXqf&5?nd4c}reSeazlyOjqoa>{I=&adGb~oyj#@Eq0$*??i1? zj2?8_L=PN?A&!Ig>`*vi7m)C(rWLLV)8Z+RAGr;Hc3~bJ2gO zq9$M8n8p=eizgF9ad&nBv7}Y^AH|b{|9%$>yzb!<6sY#6TmR3(v9$p6^C93tTd~N- zW81fWr{*3epSXJZTy5Z$_wUcoZ!l6rfqQQl*`KEks@{u=c3VzX=(yzMP zjh0>?Of{@}x9ok2=W*|>#c93c7CXl;W?*~~_W9nV70AOjs8fcDc~H;NmaD~CTu-?h zquX<9pTksUpD0wR6rz@l+m8y{+#9iGul%w`!~yx3*-D_9>KpzM5z_w_Sg*STc(_{x z1$ZO8e#Td-wTT5qeP`X0^>v3kQjNbn+pst3+o?{hnBtyGZF|oTUX!ucz#1pJEVCRb z{@eC@SjmRZ;ugKFk=ADP=}Emf@+Nnsj@RSmdrcB=B|+|X!P{0(aH=tkV{W%a&b`?+ zU%Ta3R+%94#(j@%S6`0b?s+Lk)7FSN_w7h@?UU5asa)EvGgsZ7wooC>&3T zjXZE*^jKb?NBE#bSj*KQJTY`(sAzPdMrjHKQ
    iL3YDy@|Z(X2heH4sn~S>zOFt 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
    fq>y`*W+Rf3};}{ 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 P-}!)WF)&Hx%>eNLDmVM$ diff --git a/quickstart/jsonbox_test_api_just_wrapper.xlsx b/quickstart/jsonbox_test_api_just_wrapper.xlsx deleted file mode 100644 index a65ab79d6db500adfdab818fd13528616bf3bbf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41209 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 P9}Hf-pfDXL_)mWW^QyE{ diff --git a/quickstart/jsonbox_test_api_wrapper.xlsx b/quickstart/jsonbox_test_api_wrapper.xlsx deleted file mode 100644 index 2e85ff5d9a1219ca295ce51b2619840eb92e9d52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41660 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

    o;5tavAl6s~rX z6SPwDv@CMjdlAm&*}P#+|Ay=^kg~ zud{ku^Vn03yol6M21toO%^*q+dUL&5LlMXcr&MTd_)TPWC1;|4)agoV$~l}RN+YAF zwN=~4__wz%lv`~Qr37P!$#VU2;Y%-gb%yzjMzs~N?EUU{Xi*Wtg&g^zT zehtxa;eLB6r`vdOOzkE%!9)XEJpY+20vEv-a;N6&Y0I6>vmq3Q(xz8m1hb676E5faJ!QkO$vIG}@ zeyz0?kiVz%{Sw3D9-P6kr|SLB^amHI(cpf?2w3eL2)COb3T#S>+wIV=$e9cpYy~Wu zB4;#ckO&p$h1JfnX1=K5b|Y);R@Y~~;DC<@)XpWW>=H&dF=o!AnGs(RgPXGrK$)cx z)6Rro=J*HM>H72SlOGJG$CBY|%R{>1c7`BZyK^P8hSi=Yk!@FRQwut-7Wi!Y__IUx z@W-E>s+u3qb*OItc&<}b=Hm;qPF*32-pOG8*m|K_V(I>iS(!OcpH(@%RyIvKlD~8D z0!^}jxCUy=IQ63g9$bKUa7WpaLIa-qw*KsG8jNDd-W6E9NRuqhd~@)}uZZBUytNOm zCOz`}gX4x@)5*c()4&IkROy(?jSuuj1b1x^d@3+l35qJ!Gws}eGO@orZIpfDFjxV~ z|H$n1v^nQfh`}DDVE>o-l7GAFAMfY&3hR{bJ2iX`sVvIRsMaGX9esM_P^~1Hd9Io za_kk-@)6AY?@T@%*d^?LZ4H)>!HQ6VdOfwy`TP|#X=9hL#XolmgI)Ckb_pAP+5zkm z)+F&xLJOX7-r{`Fw3J7VJFrXG_x8bC`9k^Ll4gO^e&2fsZ;cD(PXmQHzwbLayNjkp zE(D~=Q$$vU?3Q=eP2apw57ajN+v|@%U#D+YXceU2AzL>vj!m=L9tTIU159jmeQ#^)xi_jJa*yZe{J9f`-3B zL-M3CdD2)+<u1>H7jx0JUBlK{I0e2h1=1jmX^>WhS*gKNO>MhOZQVsu0!31K8r*0N zZvPjnN41un7S)_oA>fbT> zD+zI14ffL1w$s$sO~f)##ImR1Hm%{dD(rXl@0k3Rga9_g0JgiViP^0R`)&S?!{12) zQ#IH#Q(KCut&2!ET%`L~!$n%dMOE1E>fbT>D+ytz2E&-zcAMIIh;#>vboVp_(i#F) zVZW6X`iEr8eBx}SHoUf!(LU`@9N(%`6~%=Qw^46+Sg&)=PIHW zD5BQWU`lH+RfYYo{vDG)69Vi!1T5b;l&oZaST1Z5E(uB_aV;&^$;%6CBkZt1Y&D0s zHq%FEs(LsmibUotu-1IkT5+{xb1I2D#c5viC-&nRL%?bhj;_s}`_xYAoLXmP-l=7( zks8Js9;CbZD=CM1X}06@EJS!<#7Ft>!BlSfE@;2xVLPS}^F;28c27lxaY{YXLx<|S z0s=3EwdBr=TgqA%7P4j;WOIg_CtASTTDwm3dA>&)SB(l)^H?8m(r>~+?;t~whlUDi zu;q%GLJ~BiM2To!>|ZTgOZIr6c(GEG}G9q@~ONdg-Xi&Fy&#HX0Y--3#Ue67caoWKWg-4z^m%g+}NC|EwUbI z9<69;Vjq&wV@FJz@?jTNRDkOuR?>A4RXSShL+YOv9@VXcg@&FVGG)&&R%C7Z3B9uj zbzRE@K4@bFQ2PFbz`7%wHdQM8AFKfW`Db5&zsUr(=}x`0u>$yD_FgzM7`YuAr|Ofp zH7ChA(JZQ3qV2%J{V)F5dxdI<;2yQW4tLlGDZLF$dXDPoQCi6oPyZ#{LZS0RA_Et^ z@U>KLXa*+Fz}(EdOU;A2NG7ken(=uwOX87y+2Hj~GJDD^yaExlMp>I(T509aOfqI> zQMIIv6~Od?vDu!{thtAdI@i|P&!ptnGC_3OY**ppu&|wj zPK$X)Wm9({nLNprApGK<9sgx->)q0Y?9IT}+0&<)=H)gHAC`f?JeZP3t;Kn)&vP6! z>1`CCrZrJn`?kt9U@y86-c*I2CxE{ zf+O0PMbt)AiKi8kdHKUn^IJ2e%y~FkbK{s7umTtuPOwdh>+Gb3h0X*4D}YoMkBMvQ zUZMN&u}4GJ7ly~pK}7c8xOuA@NlZ#{z1cT%etJoGG7g+4Yo2kmA0E+)gm#rM`@88gs`Vr7`UZ8mkV}ZU^5IUioz6!e|&jns23)w!Hkw zcab})GSbb61@6%7>etrXM89|KQo#i!H@Gp zIrB)}uwU&ZmS7(TsTH@-z@Cpu^-52~sWZYTebl0^hHb%cle+i(%+y@mI9W7bws3T! zkj1@#%wU3v{GUm+d@cLr(T~C1(|$uMAR=DXL6UfpG>WJYAt`cP0tiIgF{1@Sp2Dru;w_d| zSQb)iR}}kuNVVMMHS+Zp%W?kz1cAVwC~vw5IIVbIk>B5Ulpl%XPx=K4tw$hVb4G4x zPLrXv&WH+U-nUq39WNp`c7_}~|Ki}y$YjvKd4gRz(zTggaFhsJNm!00y8!Mxh9i#cW@A?1J-n9ocajo%C zt2INFRs~0K^;%}j_$t>2WLkz=)@$3fu3`)!39OMIECJ-@qt+rfdVTaDK}4(- zaj&kF3QA^Wyx!vNrRowRM(7qD#0-`|EsuZ*+(YcNK;vBg>HXtQPG-OF*=A`jWNm15zqi|gPIHsRoJ?nnbQK{wc1DkS;Mtehr`YhE? zubZ`b(qrh?LqB&*KTSYSLB9d|v(QHjjzcdW9M`5*T=4p7)(MOCg0Jr{h97W<0)twr z#=Y2-Sq%#;)<{X&8fCU%#S9DdO3%Rm7GwnL3d1?Qa$aCro#C9tN=eE-R>I)E%tNYQ zy1yUK6RhtWw(6C>fo1m$TP;?#q-?G7*I>WF!&G9JUf)s`L}^QX>(7+jh}C{kr8kx2 zPp`LE=_zfwZ+&rz5UVX35qzRk-!s@P)>uhdn9?LzR~Zn!@|8fn)qq&63W!SFv}I0P?zESj_OjDfIIZcrcj)?Nq3@Fpv#Gice*f>s+3KsU8K0(w{Byol zxOIWudvvU+ciPj=*Ge}hExlGbGt#G}RWshY?7Lk;->YL%KO-)f3JN!SE%eko7SCw$ zP=~$_=t+S81V#3sQU$J2h$CcXg$$bp=;?s}6h-!;76oooh|^`}oic1Tpx*%eXDE_| zN+WSiq&Qz@E|g(&06iD*`%okswM62!NHHffUzK4C0lf(De?<`kDpledrC5-eAIPw` z0sRi(_oK)G)S|>~N^zge>_K3mfW`p-HxxODN~3U1lo%n*vk43b^a{WqLXpF$B?`Ai zi9-l;D1og7^v8fdf+C-zQWdUIi6aQJg1`tslYj>(l7m`QxJ@NaC(JtuOabUfz#m1C zTvV#YHEMA_VJ;-F7(i2iH=;-$YEk1hwU{H!R|#wzpyL653`O!$sRq|*!~$V{Kwv3= z-VXTVC{lo0G`LM8?jy_|B(@XKy8wRzMG8@AG_HvjBcypYiDdzLAK*`-$QP(38n;D@ zLr8Ndi5&#=A;6zPkuOnc46cb0N04R(iRA*?2>8<|QiNJ!a9fNxoiy(xu|hzf1pFBk zDMqCfuA#*Fq`8p9iUEBV@MlqkK`j(+qr@Cp%aQN1Adv+%j7nfs9Tef9ru~88+_p`p zQ!jp(^yhY+qAM%)Xpdy!wbrNQ3mbc3cTr<-Zcq85#?;&%$>K&6>@RMF-|mwvX$&^@ zlrLHKznthFDZ>8~cVX(q_gJ5b^`0G+yX)5B1xc{nL5=0e8jcKQ!)Z30XS@Z*yMuCv z-I|OhA=Wu4Z;rgfk;~ceL^iyJStl^-Iw*J8t;uK-Vx@zcz>&8(av57ov$Z@EC@_H? zlsoL!WHbp8;h+$Xyvvavu(gS7Z4HwsFo_+MJM7kEGzqcHL5<<+c&_d}Hi%|}cxHmY zOz5E8VYeouNr*59HJPikaCLuSgA&=G8fK-ytn8rNVYeouNr>jGiM6dc&pMYJXnX7K zk9`HjRWT+H*I|A?|1IzhGUho&d%jC?xttv)(el+12^m$rQGG< z%NyC75=lb?*Lw+;1a0zw0=wS_S0XCwcU0SB+uOU;l@(9p(@W)T89n#?*;-TIqn2w^ z!NS<}4eUTgU3w+qbA^=8*QEX&-7~SRwY;l4xsnTcmpp$h+n#Z+yZqL~-RG0`Y64+V z@bHWUHvhd#H(as8qF`q84P*8F0Nv`?_0==eOg$;w#^$C&^Zm{rkY_c$oY$9BpQ*j+ z$hn@ge|5vApPG6eOlfG@&lKq74QWa6AR2Ygk?Omf%ZYa%KE81H)+#n!Vynh=ISZ1v zU3{naftSQKaOwM&yKO;_(#k8kn>>@suE3{AP3MknzV|rKeuLF_t}f5h6m2_dx9j`k zA8J!gZ*M$KcPBgQf4;Nr6`=dqH{X2KB?OeQ(lp46S!-oCW*X%o};thwvivw-W9 z=gSW|W(Ih*-Ac~v78)H>Hypq611t+>d|oi%+!)xF95=BBmIb%W8!QWYyfj5LMKpf= zc+vLd#nL^-CB{~fNObchk;oJJ;Y}W|(k2AFHE2fy=NFlxaR|zNStRlrhVu6iiITMe zNxJwgkviR$!HtC@!BrlUviu;B3=xSY3^i-z^CJ5YE-_HwxG*esv_va}k_e&KjvpIkwOA{2>fZ zD{iU?synoO3nvQYNQhR%tD?f__?TFY%LkkD{TiRal^`I?^q~ZzO_Q7q&*w2zR+lqj z9M>=@e5`D^IIj=mIWk!!iqa|9#OvY`0+hOVl`CcP{}DEC3WRg;dTkio-+KsL5f|qQ z{h(H~BL||Mzzg1ONK5etIb(7LUz2)2eWf7$_Wt%r*_oM0_fcEd7VEUk*A<$Xu?*cyJDepa$R&&OFs+ekKC~V`oaL0-C5v+x?nsuQ gukUb{)4N=Rt$TRg_j;{+t;e7!w`T1QiuDv5DJUrR zQm~CG7T#G!LBY0xf`XP}<7$nQmKHa!THMsRWPkmtwHEI!bF)2BYgg}&q*x8c|KGp= z#Rya=ms@-|v^8IKSW>z`rQ|rhGM(GWAbqd3cnVsYl6@&W)yKQXMGq?~(|K(@+wZqO zWsrw?Z^2Ro-dAMlteFZdZm0+4^}@cWd-sU_1NCL|KF?SZ%eZ_S|9|zox_c zd+|KiqV`NGDCub*k2z$+d@%WuR_u-m{by&BC*OqJHWLn|Ibs+1Ug@sM=9;m*_iB~0 zvfA`Z4lxD>31`DqaVBx+_K(Z?bL+jZvY27Ti@tv7ya?Nq9<)MRjjWaZujQC_4xAc zUH7hyt9Q*))|l%~7niYi_hp_Gw-)%u(|)8X8!HU5jzCyLq4?9%%}_qXIt`wj11pmX zEL|O|t7g`GyzuM)E!qFY>+}cL6a3^AiVtmmFn)H)y=<O9 zli~f6jj^MUbNALu40qR@am{yG`qb7T<~>}tceY0$!E5^tQPxbm#0No(H*7W>;IIlj zeIuc}WSecnOv7yO8Cm=Nw)wsX;p)HaRkDVK>4W=uz)-!BLaw;?1JF~!`e9`Eb z@msxcE0KNnItFI%r=&v*Y4J`x=bx7;?GxBOf28^hhCOn|RXtr`;&YgNi7;hxeA)N% zJ6E0Y z-?7>4Rjk3Of}7l9+REm3xb0k4k0@2P479$I$!I0GU=(W&(ztExF6h0#=2Knqe3y=E zv+4)?YqHjtUvJczFVhtaIF_8nwYc>5CZ??BLH)69sn@t1bQzqVE#aGH&d0s>eyTuC zQ7>{T=CFK^eMn%!zQq$l2@e8J#CiU8OIbrf*z<{I(4%14TW;eR?NhhB9qvizZ#cPg z-D@*mV~v#7={=s5dbbOB?O$$4_bk|uv~T#0x#ofR^?QUguTRyw?RyT+TwaH$?#BFulk~`uvpiAd0y(_NFcjxwciFwWErxVzxDA*)&H_Q7w}1JKgCMw5c^&B~Q=COM6}`A5L38ryAQ_#w012un5<*r+rtNhI9t~%JTX;^8q7VgnJVJ;xH@r*)_>#~HvdrkJc zM=iarzAju_-nRXwLik>-J)TP$A(nesj%qetV!wsAVW__5b#Su7KKoI}g{=qM%?dWR zUuQ7r{am_#Htjp((U(2kuK)?a-zXCU(=Cb@mFKP zWq0#x+=rI)g~lHXL~v)c2d#qk(c`}G>zvoI>*!&vmZyxOy1UUNJ_6@HVNUtz#zQ{c z+Q*e)W7oJmogQv^@jxzKW=8vp&u_NC@~sUiD$eG@;h z#(#HLxm?`jyXh0-Q>m{dQVp?P?44Z9SLNO`TD;cW=;*t<@iId|khbTI&)06VWYap5$sC4AOTJ z46RNIR7skBd+y%a;5Da|6vMGeHTaTTW%_} zEGO!w|4Q*Z#lHChVL$uM^&;LWBSluPtqST&Vv?^WdwC^EU6V--T26jYW*AcQ=F*1< z*;z>%aZy6@SX>;}*K)dXCbf5Zduxnn`nl~3m{Z@*3O?SRHulWpejat&^9$&~wqbzFY3)#Gd$Jf@=AmQX}%csi*d!OCB`b=PLn$GqI^ISy&K`Bpr84Q{e zcbD<*D6_r#Y>ej7bG*{R?@ObLxw|$RFi=pe^;kvm*9z-f8(qD6)0z+Y?=YnQ=l&YL ztpLR??iopG7tZq^1h?rnbTq`_l$7%&7!6Mx96g#*nb@#A=d;Bv;IWF)w&wMNPKF;P zD#mAJPiq`f`IgCM{QU7o^(5|^B-zO+Ox=~!`$p6>4!_aZU%u*Kj)v3Hp)TXJ%q_RQ z9)D@|6R5IT7ZWHP`OMp90}r;ob^pNk_{$gCc3n~4$|aM=7OYq*E$4IZL;Hs>Hathg zObRZ1dB<9E+kko`%ln&|!o{VX&-Je553SdXr`{&F_rB=b{T@5`!c`N6%(zmhE%mznQjkO0*)uWWc(8Vv zQaf9k(P7p;A1fYl;%#9_?41zvXvZ&;S+SaT3yhx+*aud<(ytwNsmrb2qvBmWc0;VF z_q+XpxMEf{AE}QYdaiuRklwJHm3@h2yLH*DZYR^wBwNgsB0t}$fq z)KTnlQu3KR`kC`Zobb(Co21+Y!*8m6kBJa|TGu(Tud-KHf^iF8N|Va?+l(Yg2?7E6 zlF-p%@w{C3Ubn`!TdQ{B3fms9V{2a1^&oO%%kC1PgQYUqPJ^KQSLw>D)14GH7rz?O z-*S1hB^c9{hg+I@t)Szw_`SavXXlEaA`~o)urPlr4y|@w`2M8`BS3161S zcQDXcN-S3o^0_XLOS&v36Y>b%#i0ald@-hrfFTg3ho&$Jt`3VIFkKn$bK?>cn58!B zsyaftc%JgFcm$BmaB zj1L_f3>|;tG9^AF7rs0bH11$dkQWy`S@34?xn;qd*-GIUzBeP?V|B%IlWs#gt~6bE zH!;^S7UtIEBjGNoe2z}Sy$hyVAD7%74JO;{8rg6pys+`=C`;L`W%ZyNE_>j^)Ambl zk8!0!{h>TAu9oU`$*u+cp)*dBrwR!i{h>N@A#wN&xBo&Yv+>Ha^dT9b zFo)V74pxm660dv3Nfa7xT!-`m5!KV}j!Hxeg2NpZpaV8)P-Fh;jG=&VM?RuU`L)*L zr=SPGzKAaSsqrAiQ0)n(T_$zhVRc?mhvWvN9SYi3OhQmq@^N#A*VYas55ua4-cVzl+5BGDxOs-cs_DGDO5X^8eq3_X`1BDiSaFXjDCOoB6K zXaAFs48JA8Slu8@tT^)<jYT<#UniwV7WYv5)4^w(uKw+xrxA z(<rmcr8122u3Zu^BIYVp0;Uv zC`$0Wmycx_+RfK=`>=RVRbjtDA=8}>wn7@S!ONj^W`n}zv+v(u_UK8t(sxd#V1sSA zPQgI3+t|`-A=fRVVuklAb=HVh^XW}By|0@3+`J_Cc53Macw{zsAu@m)^SIEXCX#OR z3$AhrmA_7M*SrWA!92zskWIgHL4bV$v#HI#-e_H~k?f@S+psfFR1W#QV(VJdW`D_e zoxZVbs`#O2DpBXSRiEx|FQsc&_g*4IDnbG$NWFJQ9nqzRloB_@(_ zM@o==fw_5V)~I3AgNCODj#o4jrIS^X_)jheN~fqCN`1vfP}3c>zhv5P!atDWNpSKh z%Glnop40Pa=!v!|-(T7n{RqMOqP{MPS8mJ8WNtX!EGuBv-^$--$V{hE^jE0glK%ZM zG1<&J7lcqnu`QcEwm?g&+g=)R|7Cp9Z_MpQ=5}R`9EL3|S8kfGyK62x=}R}8C*GQQ zr<*wGTiYiaufzL$I2)4pV>d{^z4?(xsu z!E>pwK|zOXPy3_5-+KGsbhj`+bC0hnZisJwT*zKitXxsdRW7Llh9)O~l(1zUf2?wt z<~0)3yj=BCvFCnHAhU=AXTMs!4;+90vE$Ad2MC-!v$$rzMe$DfwFLQEihTWue8nJN z%L2#C9@u9yh-*Swqw5dTsFG|208Mn70blxZ6sE7!O#xSZ>1@N#(5Rvoh*lFvj=7Nq zIMIxX`P!MrtEK?dn3MFFA!NYq(R}yB>u$bk0$LI(90r6jv+=(-6kUi#bV`MK%t} zKazI9G^k~eX;wN1tM~UyL<_jea?Kr%S+JHpOw&{_B@@$JHDwr}$DGu!z}+vAB;cw& zq-<7Vx{JqEk8AEp%mTk$vYx&}G)_bqt1s6(7$^iaFXw*%s^{EIoAF>lIbIR<1!e#c zV5*RH!*oP30Et`kv&qQVOb`nOxFVr|2-DWLI3RistSQO1blo|)I^D*^I$03OnHvVW z)mMBWD`~S|N~p7?W1MsnCZdeljcMT%(xJK?y34L0G#5nv}^P6C*am}vSs z6E5!(r0}XQXx{n}<4r1ky?c=N+ zMJ^bJu~1?AQ-&7#I*_A9Pva zOvr7>CO_JP3?O&HW%q+UBusxY60SwK-JxQBnlWnc2#`gA8XP0fUS3%GBmye}at~w~ z=-tn8feV6Y8(a`1fLyMI6|P6t4GiB;o+0UhqKBj>8g@{kTpk1^3d9@r4{R*$?*Yh~ zzHYF?R8f?rrg#gQFSZg$R`MiR6aG?l^@za89VHpK{ouyHjLgcPW+4ZYL-3_oAW@OnN9g1*8Y&>7_wmz z;hdT!dk&L}5#5jx1kjof!R2RfVZxxHLuiC(9!#!}%4TI|ch{*J%-OW5cSyb#oA@C!(fU9!;fA)lgy^Y(4Fd zm@VMMf(?+z(ZO&d_;V-Z@M|O$aFasRqni|}_cxtLe!g@MUEvrH@|ym0Ck**6@%9oT z@sK<~@^huLGQRm?6T1JPyu)O18Z`>8LVkyAR8>9Be2BAR~9u>$9EAgE$Es~|ioKDeXp zmKEi$v65lXYPfg4{6nW|%C;m0aC{o*Zj_&F+7E7bSj9;Kr1Fz9|9QK!fH(%G3mLM1 zj0miZP;enJC5HATyNQF6hKL5jHAKT9*AU@?T%!TFrrM6^jB~<|-okx|7z0Qv#7QtG zh#110AO}&n9G->AsQh{I2q^YpD#HB=o6-uAEnJ^5#U$STk(e8z4%yxa%Jo%t)7Ke^ ztTX4Un5(jT9{ zb5a*t?GiHpVX9vwHTA-J034+3U6R1z8k|f;Yl@kORg6oNyC@P*sj($#8aop6crat( zB#7<#>FXQF3m+YTEc`!q!i8@~5{pzhcgYJM)%CkhxMFF=+l$Cs3u+;Dy_mN zKtI3CE*PGeovMzIa9$WH4x$++P?K--&Ag?k?;P48om{)L<}6hd?`=8_)$qsmgl;vKXFtA=x$pQmm-S)aqYiP*eylW+C(O+TeAl@uco)mSoFn^Pp1-(n zUVMD?(OHTuO)*9)>lP;P#saKvHVIt8^;>rItvi^bljkZ7Urh<#rh5D$W!;-FQ)^kC zWU0f9!#f!?-=trt=!UPR7_MC1pybDKK_JG{vbsVmD3ht#UPNdG@6=&-#nPDp5xvnq`y3 zf*Ty&X<5&u`Og?#v#g70G%dvM>Sr~`+~ek0ymoW(PUho1v%Vf#ixKB5sxLfb4yYQu zJABb_jE`gg3q8gm=JX|YS=E1?uRI56?r2Al~_eF&&;YMS@GUl)1TWQ{|(c67HEiFB1 z&qTTi+s8FW@~P?=*)SXSaM)7ly?K3J^GS)zba{AWi=a%a&CpNpr$#I^&p6yi-cPY& zMMmSy%T{kcR^I0%f#0!XZ55;LTy_?}HP_?nJ3HGUOqg};$|ros;w_oOZxP}h<`x@rG0!D$ZC;#B>d3!!YpJ;S zWua?_cK#B6M3t`#|NW8V(h&b*Q1vZ;L$Td>{f`U%`~{!+tE$5f7dU-n>EAVj?We&k zPmHZ`wZgqmwq%*FYum6qI_oA`==_z>f@S_Q_&7Z4R#@Qt)e?Mc10S*ABY4UJK4QSf zp;+fz@D!ne&Fkac~pT$L!JQxu%Ip1ggsn~RR@U@tP zedy%%1y`3(@ZprH5_3eJd`?GGCY9{46ZY)dvACx~b9_3FIi>fAlgAZek~SGctK`R(4ijrEqyNv(X6 zt1-Rv0xZ>Hs|^R|1;oJr8{(Z95(b%4?qnvvnKT{K#@;wt_IZ4lQ4wM&dnw1 z|6?~U{gvZ7bB*UDr4iY=3a0N=zZBdT?BK*=>xc%-dE_D^$28RHoO`em(3!TK#U!n6 zxsGZ?t<2fE?j)@k$+8a-Hxq`KmsD9z-)+ERb)ko@z&0@IHG-BN2`%v(c4Wo0c5~1y zs7(CEJ7gdP(IeLpj?U!ag%&PvG=0a{-VsDnMrAj5m53|uLx=NaqCExI?Q}>OCv)!c z5bVU@^=mURH!Qc@^832gw8Yo3{VOJ4uutX=N8>Y=x$IJ3N7FCM-Y5RpD*-I9>LpZOs{E{-8O=pFG=s z@>UPMly%6VYq)c1;#rgmd6*WJ?G+wE6J8&S_O_Pr?aq>vK54!oKJ%o$Indkcqa#gC zU1Pg+!s`0N%wBr`yC>6`3L|&#jvAXk)&F&?IVSCfXrTPX0;yChQGtQLXncQdWLr_~ znA!>X98I$h>MgnKl)OPg6QiJ+$4(hyL|Z*D_T`I)UnI~u+DW~o0CtLokF~w%&SD!2 zHCh_GLa;rU^~y;@ca@#dT3(s!Iq6K*o3LO0(gbrddoO=rVz@82U7*G#&TxyJ(QaND z90$WgQMD2#xm2#=G7jt)MNPl2R>q>?TJ0~2ve~3)fsNjx0=t9QjH1SF&E9Zd-{-eh z9>_e6{qk7TZ&qG_!|tuWXrSfAg2cB^MFkE7v1Mzv`WW)q8ENv$e35ROI57F)~Q`5Xg;Tf49Sh6;axRhz9`_%P)-BUgCL{cBeb z&6Zkr$^rnWp`4x3GsNoGqRn+opNqJ3Ztb*jKRxWXHb|~*B4L=?y8%^pwc|z2JJf+B zQ336sXlL3j%}fVJeb{@S>Kf?V8I=*ysltAV)I!i{X=P%_M9}dyw6rt&iaKD1{p4r$ z@eqe`TeQ&tnDfx~u%6ej!0ZGjo#uAB%66b#O|;-`4tGe7Ty25J zHSDI)+|=mjljip;wQ4G~0J@h&3%>L8kY~-WxB5|-Eo~04+7v@CWLKK|q@C8zZ_0u_ z%WpPFE-!d@mwZ)j*zVBWo(@HyO05YCF3dpEE#UxtYt_8APvSRpj#ah?aAFS*cBuP| z^Qa0~2Swu#nG7VM)_}0viiPGz1?Qr$ASV8{lVmq>XwO1{^;MZ;{Xu((et(X^Ggl8J zK{&oh7q{$0%>0j1~nZggj*;#aConyC1u!B6X zM!a*Tt!yU^0NF7p+8Dsz55kK)MKcj?!t5=uLjnNTK?@Qo<1T4_J7QR1?}CIabh8aa z40>MFU;B5wet`xv6*l%SIvEcWB2%UT=D=3d9`4ZGI3yCE+m(gvl!@t-Y=(^^rBh40 zGDs)H$bd>MI1euSrSf>?+-hPwIFa0z8!y`1==0C!&p0|=wN@3h2J2Z5e@O>bff7rS z2@=lGc}|Jy2Hf!`PKg>|)r?2=%^8XMnKueH4IIlJ)iyH{%`+YfwpvP6x6VXKOtd6* zy5~wv3?<2ZIwt>};G5jJAx~n0G8y^kG6Vf;bsev*&?2dgk_S16dTx%H8q9A50Sh{W zb^*j)d_ib|ePFp(t^m_IK0yK|y{mVD_R0vFSP;|gn!IDL9Y_$iD$JlG(=9;^KMfGQ zYFnAlR2@O35%d%iRt|AKOiUy^aJ?Q_F%RuUmWZp8nU>P|U8jk9AYqYJ!fgDz$;4iS zIG2~2-w`7uR!*ghYCQ(p-$l_NXapUU_g$AKhc5MdlgNRFu)HU!DCbPq$~03<9>B%u7BmUh9hw5wpVO!pY9 z4m6khv`f+sO+@eUmGQ2bW_4I79L((+OfsH>>T5W{!H{$u!MHojkI(NWH*Z{3SqMh8L{IG$ozmx#(jswh=q!K5=!aG$SS$yXJr-{mGm^*$Al)i84xc zuVEUPTfsfz`a{79&d}V8#LS5>!=6XsrFBis5k*nQ+h7f>?ciw0H=-@=VdOOFc!Qb- zSmuwNh->GC?4VZ2LWZa;lsf*{iKMB2<-ei;Au4nvs7D77V~P9)*C^nZWupCG{@fn? z$w$@gyAcvaae;J$_z!Df5<*6zWCB3&gj>{#y$Gs0c<^)+{S2XDmuzZ zJutC|5WbHtLbQ~;QA6~<*L}A60KPc95prM9D(D4Nr zoGJeR2G3oMR9jO~(5_BFcV$iX_=|ud~BFTk0hR8zc303x+ zPK1=mhW$eYNcD`mfWS{Q_8%xnV()*HWrh^zkZ@Bv;|rVHwMg{;Pp7NY;@b;6^q$(t#ouwE&(>kd&Lf zC{9)cH$t@7hFJUtibTMztdE4R$1^R=lw{JhixUG8Y;B$U{iMLKiDX~nkwdaJ^c`j|WPv4tr zP?>pLvY_zX&a%4o!t4X7FV;E4Fo-8exTrD5v<`(R^{zVklIjv;-GEf2jQqOB0yE<^ zq5+pyGtS3lx>?Yb#;l=aF429qes$VmM??6>8#+`(7xhO5M0FJ_fwoI_7Ssz+SdAhwn9O7ccX&+!s0o>Rjem< zUGz?Q^hHv{b3VgM-JzK%FV)9LY{AN!O0TM9mQ>Y@0NJJY8< zF4NpTN^!(Bu(Iwl!^vXd$J?G&8AmSy!^y!>}v+r7Q9?qv(%og>|R)m)M`u zDJ@;|{;Wv`8~v*TLLcjVrM4ZYqG{tg`MhtePL+W_e@;Yx*EPb2jP~gkr!#g6FXQhQ zEOl3Rxe|Jtx|Zk1RCSi|mV~L$LIO6eKdo!&yH3~gjQet-i=*>wC_(E}Ru_J@i!eSi z?mCaf6)w-`R(CoVIL|f&b>;Kmv$8UrwH8K&@r3yoy{=9fdALb0SEreN`Yva+DV(b5 zPOT|-RZ|tMshN1e(4>Xlc)?RmPE)$_gwL3Y+@yuNc;~nzdxA;C$)thx)3+c;XB=ZbHD52+kvIg2-haZ(Yn+7 z)^xZO9sitLjT2l-TjShTwO-vhlCLqr)?>N5l!4`&JNpsETu;KhUTA3#FuC$*PjNw) zq_Z0Tqxpu{ZPjOR#_|L`gKy5B`u0oh%1-7HbFLpE!WP;rgr3x9T({3fAoyvLkvQD*i`7yeB9@fuiUviCBd+9{?knX`p_kp0&5`uItn*w`mVp1$nLT~)<}66+Yur0#o5UvxT{ zqHxabfrjD@)|wqGa#-4nk*m6>b8WRMM6TnT-68^eI?pa{i}sejmf|vs0YkBQSO!o z;GddEz5(jqU^Q#PfZrke8h{vDpyXooJL^++chaAn_2g*?n>$@gddx_Ed=fr3^1Nhc z@$LL$q3!ZdhO4%8P}ZJ~;!^6!c_Av*dRE|6oT%_k&a;djug=;GKESRuMs&4*`B|9K z(@S=pj4~u~J4rJPrT#-*(aje->@B0`(z`MPT{W1SpwU>e(M)8cUy_WrBbhK*)s_8S zl{c*`XY>s=Pq;Q>+ma|Q`?MkO^^en{W09d<^)Ey*f)G(Ul7h=*kpE%VLYvvLh~q47 zG-SBSkrgjfI_~*VP{iw!oeIe;Lt8R9UA4zh6hBR`}jfA=w8FkBQ z+2*>#N9}w}VSs)ZYE25&FO&Rw&e;s+Kao(rkKK)c7fuF`mgJj#6iK%NS+@sSH`#Gc zQu<6ulY)y1lerP|ZmRQa1l=j3U3_FQ_eo;%$S%;6#hf6C(I(qOMYf5Yg{ZJ-wa%DN zQ!VA;x6e3#Iw0qF;7dOf!_!#FN0JGtY;U$}b-p;|;ozqmz%D~KG)XNlTkpR){-8|U zxga~Ei&5bQYFA~H?!U`B`EvUVTUys%o^hp^#Zd!E(QLW{@n#%v^uYYf9*gH5C zhaC!2(o%ngt+m2Q2eXZ;4a-#zIv>?ant@RGtjQAXKWp$%`YX z)W-VN^~udc<9T{L^(U-7V>yGx35D$v7Y7X8=QhPEh)2v#Y8QaZeD zRuhObE~P#epnS~#+1ZRQ(fds9OdAf)hVJ8kA)lf68rAXA8owT5y{d~wK$c}^%?3G1TK(ravj49 zc|lB!v`IS|RHfw~Yo}ywpbMrUuh(o>3Y&@YQ2jUf`Z*0bMDHBX- z#;d7oP-XBSHVS0zjMG4EwB)JJT5Ih0?0v?UuK-FUD{k=AXQNvB)MKqsEtMIHgG6ji zU(^z@Z90(%wScThx^EJMVyi_p!;31(+j&466==^>pSM=VPjJ9qT+}1}L_Oi+a$1*t zVwPRN{9KqJr`+ldQYtOyl$dgBr}ho=2aB`hc6KUXVZImfjtRerp%o|{fJ7Q@=@&~hN-;puu;#_sg%@DNzIoqNz-``7j2H@B4P&Gitx>b z);Qa1;Y|*Xs=;j8EI2a@8Sn|2HZAgEkUf4{Bqu+M|P=hVfV7f(j~Y*9$* zih`6v92b0R3=-PUBCz)_@pYb^=?S2k=}z zz&~-mC=O)Jhd0Sqqd5c&na%?VQIBtib`We|F*(MoJ&9m)fWyH`Cq9TMA8kpTQAs(% zUu3>T*yVJOfGTw-^RI@rrd7t#e!lj9IX4PMOYY9CCcy_-t@yG!2+SgGtnnCi-*B$Y`}kZoWC{4SnM7ps#}XAL905O@$c;UFnA z0CMT#PQWN*&A`h^^UFZ;v562yz;=R|EtQO{ssT z_0IqRLWDvPLga#iPu2UMt4_)Cq%(FTW#bRAAvp^7$bZiaw(^~jRr>6-0o}99*o=Oh zvj?E2`E*!}AE-&GJ}*R@M`EoBXKiU`4*m_gUiRAX!O@MWpRV~0H+zqxbf)^YR4mz$ zGn8`o+RIn@fvnTOfocO=N!#B~=-_S!UZ(k1-3t#&s0}U=OZJA#-#|ubZj%s_q7_oj zdgD_LwyBmFmO&U*06+RVyz%h`DL~HOO2*-iPFzMhTAT}Y_ zF(PZ)0cmz2!4d^4!`vx?9;^(6*&s-O0A3#j-GH|p{D$)Hfc4PM9XXg$1Js~7>J3*i zlB3`|1>o)jlkjgA>CJ7Lmqq%!R-p?tlmj z{))yQ?EQaJSj%=8hU`>5T78fL{3jd#31)w=;crUN9Du9`0|zUh-=zJ&YlB}jShj|o z_DVspc6;N)gXDHgng%;@bs~!}PM-=a5DEX_yNbw)uUrdOd}?sCNahz}C8Y8H)W5a3J)%#0YcrW}S{`v7?j zf(=p`We>;`_W@lIxd9rFR$2#8YB&bS168!V10$ABfOg6xV$2c8MUL3q&9!GE&F;eo~)?1qp7f5@tT3iH1@ zE7Y|-Ub$<~k}itt9u zREpz|%k~lm3sQga+_h>9_Hgw`OZm0c)pF?3s*Xq~xrl-=N^!o+G5i2bCD|PULFM;jLyne-TJoyV63(j z*rgZ1E)7a{pM2$ndp9zP^1uNnn9W81D<0Z}A4Tg8c<4YYAk;o^F;i{&dXW9BKT#3P z%0W;_11L#lMIAzW|Ex3lcKF}ChZQ+02rgI%7_ti^#|N|~`4vQ@Ohb)?`xUAhR=&VS z;+gJOi2qLsTDJYqhKo%GY>d_CC!=|hV*rx|NCI#eG0ZagdG)J+CE(2QZ}$)CoBmb~ zvA;I>3n&Uiz#&qZn0z)qiD*4Dm4aS&WUWDYX0RC^&H!OKnIRSn(Skz-I1GtkP}BG~ zyZ|eCh2X;U;i(@ffL2HZIr0z>dC2j4<1 z^O7OEMIiJM2b#z>Oau|BCsrusSJ!@U2(kxqmw_Bwpd92vkJJfi2v|%!RKOOpg+X_T zg)}+^(!+nQ^`k40pa77>!@+;91uF`OC@d^tMe%DQ{3rTgMS)ze5$l7Wfc($&{a1uT z#*g*qib9H5QP>~{k(G)9_9GR=wyB>giVes@1Sga;KXU;yv7)eG`f2-TawHv591#U8 z6$KQ8Rur&>R1}D+A1Vr>4Njv!*y#s%NKzTym0QV?|^B?UE^ z5tvp=3Mq0)ahF_Dh@eG0*dlGvq7kmI4T=P=a7YtPC~)xJ77QfaX}~79wF?9K?;>>w zQc(bvBpx9)VMX!FG;k{dIb|dg9>Bn56}btShzY$4fp>tie;J~H!Lt!EdaW@AoM#L; zrt?tWASHkYa4(0KlK*z6_9}5;J-i>tWkDq&l?!wTRxWd!zS*PDL8kZ{N}!M+Du?$S zzXA&j31B{v0#MW7Ng4`-Q~{tSUsC*^667lDzZEVSKmMQjLWaZ_KW)%9qp%<0i(NnS z1t*Cw41eZ}a1vjH{lXW-mpi#Oh=LWqfPzrIfGvbC5LG|$17u?)fz@V+w)p$;VfSGHz<@_itXODybx zB;tlUvUb=Rx#fq#iB$utXSxmSEvQot$$JK%aCpH9Z!w6?{5z;kKTHG7xlMrn(0Cw> zgf@|T4pbV#5YY&qKoWt%LiWJd07Mhu`x(k!@NNS#j_53Wf3o!PJr4STvqerQe{%$K z;6LhwuU{ZcaJz&?z?Veu5>^C-$#LCu-g$(8!HaA0Cz0hE%+QCx{Ee zOa4S&g2eM{tl-Z7e@fsL2!!Up1};BMxT0mk>)GLp;y8UiWcLFv7Px=D(}exVDI^KL zU^Cz+UN!pU6L3l4mpTG zBS`0Zdh!Oxi{?6{kti~aoFdbR7MVtXt)xo>FEWjwa^L~LX4TBKP-Kxq!zjrb6^LM?}M^tWLBuT}EJ zzt4+hc?mx!>4G2g?Q)qx|MCO!{lsS8a@2Q@ZmcvC!nOE+G*p`2qkh4BSuhNgHRo^W5soiSO zwyH&-E&7d?0**0lSykq8MFib2f5>0^WKXd=G~ddkXL7+~2a_AcK(s{{E;YL(H=)r622UEfN>IL^<~6D#a`>8~{QE9(zhq#f*cIVWz$}S5#xZ^3T{wZ`+*7?u+jgd}{0Ce#Az*uvM9zE4hgKUe*zVQh%DCYx>1MxC zvv}=GUS4LmRDCLruM_Lija;^zf4i2^X~I5-Sv=@uf~0BkwJj~1aus_xlg&q*?ou*j z6~^Mvd~8a*558@!NaOn91H<~Io9{23I8*fXbO42blcQfQVQ-1=?g#HAb$iQnhZ@z` z&u}&koLW67cs9~!`*+7v6l-W!#~Kz1Q2RNBaM&e_#u)CcPdg-gN5&;cK6SoOR_xr| z$`6f1`;Tn`zYpz!<*B^e1DN`!>`!Z*AFA{u7}ZF@dlRmJ9F23&ZyjNr{d-O+3Ze&5Gd7c|3dSWndzUw-R__oHOG zQNL@-`MT7HiAx-gr(gMP(|zXeRc`*u>X7jj{tPcl`UkfgqINpR_fu!=)E1$(J8mgE zEb#c=y;DcLA4hw6Jn5^DE;@5QaGy-^`&2QnB$m&9_foIB@|MdBhPgHDSF%1#sT8_P zj;GY*!NMtdUsi@n$wmHR^O>N%GW2)X=Y;Iam3(@U@!Cbd1VRrL`A21*`gX|{D{lU% z)Bl(%*&tD5=z;jU3lH{uYMxzP^J=Up^H_B7UGaQFjAZB)z9rrhWoKL#{2UX8C}V8# zSJdO`Pl%LXYq{wXwd=1NHv9uzj#Tvi(~C!N7u4)^m9fiK3?KXq`jko&^sg!Px#yYI zCJHl)m$#0Uf7rd*>!tPurn#MBUYkVL)!kbNzgyGkXxM!~z9`Q>)=@lo?Wke&sXVPd z%|M#N`Zpeg73O%+2_?NO60569$Sz)XIyIAd%I%wk%7v7|N`KaF3S7@JedgxEknHqF zCF8fs$J5Jw`pu0VrqBQOH_JJyn=)V6O+hj3|Ht1fCy4&|jh1EWp&iZ<>4dEdVQlBm z?%AlWocLuiRenSw+*|+sKA&LoO&#@w0#jPrXxS&KYje(5h!3_qCh-@FdvG{_zjoKc zyVd97j+DSpAz7j87AKsKg+!fYtZj^b!lMyM|EgxJ5<@ff@{(x&)e7m`UxwGUGNeVY zd%V)%c<9p~p7Ay<-7$rm4Do|4$FV%;TStpOisS0vvy5o-oV$li3gO-@{ilynvDqw+@BMiOSxFy zazQ7N^`weIf^PkxD@FSkSz~TRm4vw8xM4$R@iC|q&(P2Fvoh>v-g|i6wXrJ)`QcxC zb8LLyH6FPUk4s?BI^yT$Gm_Die)BFt`IMlB|4Du9)hVy0Yo_-4n##Mv&mULL!pSpB z9xiBMXy)zN-g8A~mr<-jkw~Ak6Xr$iEHYoW{D!b+Zy}_brQ*=T@&X=$uLrK6LK*z*rg;AH^q1_Sv1S z{H-xG+c~jxGb=on5H@19`;5anol`{{9)GbJ8df>$`BvKFT~fH)UjBoG=75vYO|xx| ziW@lGq}UVoOg33up}H*A;XJ@t(P!&AF*_%0*_rQz$IhtgEG=MMohJu__%i7u^6Kp%m(%^DbK2${HEDI70|DHh}dKi1=JTA-EiMwq6_DN8*~TytvJ zLOwSrJ`i;4+!!tvluT$$cQOdO(VT1r>9wt4QVotPt1RhZDI$uwBlk(l#*ac(eO zn`uyo-n7-dcd4ac$-z}TAbw=XD!=}7wF|B~YkYYg{Nbskg}J66bKblzK0*!VHI86i z+R?+S+TKqup?O2qaD1dR#5Q9fv>_y(f5|FiV0g1D&ZW}Ot_f#nCwUBur)q0B=4z8Q zkXJY`{M?oBaH;rZ#8P(a$nd*)F4N&ke11}rR|Lxw*UR|EnEdkR@gZ|TB`+iL zJ}H;ExTX)dpOIXcz-D0!56;9>O}@?*R0zkO>C;guv~hkn-q`M{`%RU8HhHd` zrfQ+T%Pf3KqrKtSxazt^hm3)^-CY2vh$-OKYG>dO&U*P9XY!;!Zg8n4goPR3hso_~ z?b6|r?7;UG?J5vam6YsRnxuCbv9vQ4*|8`wT~wa0x!rX^yg0tCG)Q&Hit*d3{>fTG z6IYg3(9;{Ia>BSZ2sbq|D=QY3D+>v2OWk#R+{qSFpP6`*M`@PBSn`W`jB<*v@*Wj! zzY{2G78H+Z(erC`Y%h?@Ca6rlq^S>_WAri|m}E8eeH7oo+%z@ZYu(p>BLg!t(u)~? z5|}iboiv0QcVp^Il3SW^yi%M+L&p-Kvy8)7y3ut>+*}IQxPr-|VRs$asWv(JqOZD5 z?@l07p);#X(}bag8yz3Zf#nLGx7}H;??t%Ye(gV56cM}{rzJ6s0~7NSN zw2DiOcr}{X71`3qchIJvyMdz*v#L4&#epimgRadPcloye>NaP443D|nSdvOEr;#&n zf~~5VT?U-ELnW8H3Tu+#c&CvI^gi#XG?`n=b5Q_F>il40S8OW`o9A^ia=S+@;OsEi z+tQI>tMEnSegpPFTJGhs@W`v47Ep$U+8Fj|Zf*mXQvLPY){YytcBI+8qgc{xOiM>1 zakfvIV-_&u^A2Q+rEZ2JrX^nk$g|lL-yvFs?Euy!UQ`?FykR>|oIXdMQw$$wy=@i0 zZc9T{D?=L)@$*Ds}D|l^}URYdB|2L@?rLt^&~(TuF;HIQQAp--N!+4svBhU^j;wRr z*=nW(8D}*t1d6WuHOgS^&8pLl!Y7;4KT7UR?ci?-5531&XzU%qc9c`SSJ+}{j39Vw zVtuB}9X9pe*Yq1gjl3iDcAG^By2Rah>(MyRg-H~yiO%#+%#^QdJ#mMv^-+W;@>tdi zK7LbP!~y2*N9M)B2jNUv=I@MCk|T~OG+VU^RPsd6bk|B}dCO;+GyH$;eRWh-U%M_S zC`d{pASf-}AR(#JrKEH>QX4@*36btDgH%9DIwT~eyG1}i8l^$+T5E5_A0OvC=iYzr z8RHxnW3%?!bH4RF^L^)Bi#4}p+qB`3O`maT*cW@igs)Kh;8L3e%T9s1+9^JHHw<*_ z*g@CrNnZKK80Zn^TqzT!@{v>GTJ$|XOM{O}ZQQKdXg^;V&tSB_RyW;yrHg1h!@~ZW z7@kd25qhb`jR$wbB;D1!c*ipq?XTrVnv0J&-5%$a=S>e&q~ApU^K`~+qTcC zJdDbpcV;ARjN62j=I-kb*OG6%@`)H0$&&cccVu9Ty4dHe+^ zerA5QiK~f@U-!n!Eouc4zrZ#U>3V%p=0U~1HVJZ&;y#<@KAS#oRRtk3=fsSDUlc#t z#0~2Kn*=pt0AN$0MBwb8FN${zImNrFS?wD^3Ud8f`@ z`?BJuB1iRN?H15v=y0sXw^-rp#NAbY!PZBm5dfiq7`m(mzyt-rR|)7<7J5~MUbV~V zSD7*eU~~S0?T<=hX58CBZ5BGWAq(J!0enfWd_7?dAYyn#p|>mIh_HQX!x#8K00tnv zw07*?pfvY<9^4T?J5S1*pn3*lX4N~hKSsm0j$Jli`#u6}?&k=C^KG0EF!9?s=nHJ? zF?|K6yZ{jMWA6c0KrJDhj-v;#1}=4pCIQ$*@T9?1YMz{`!Xr(CKT1ivj-!7p>6A{= zE?5qLnQB`LydlJ|WA|*DepD|Zj60U}Pe(gkYeIG6GmNSw0{D-W(`Is zDjco|7<{He|Kc1pcz|vF09@kJECJy2{Rej2I&}shGR=+OcUgT4#VvO6q@7HJy&k62oE>9ssG(@?qGbtUD4*rWc6!^k?(=svEB-o@c?jl?6&Pd z5}{y$infu400s{Nq=M^&c*ipjj#eIkCT}4&sveXTA}QD_9*hVaQ(U^Bo5omAI~CGNSPF17FYU9hdI>-&xPx|xjgG<639 z>Y(Ej_#Nf%mZ2a(3G7%C0L%|vpl6h99Q+gzLSP`C<@%q~VUh>4A*o2(nef1aCIh`D z2LOoRj#PtW{nyxm(AaeElF|c!IzH`4yxU82dkwf>Rk}3mhoknLX(O=L82C zQUn@M);!h;4pT6q#R|ZHiav4gk5L`29v;@o2!eqU5d;Ix2hvoh4g&8Jwm^YOWjN*M z-(CQ2S^yMjr;!KUlFw=4b6HJ*Q|aW8c|NZI*cuOn7~n%wr%oTB93ubmX$biYVQpTB z1gR`zz)pTpN&>cDO8~ZCg9ua8r2}mI2M-Sq_y%I{pey1$Fs`p4HvR)hs0D1R36lrt z0i;+f#6E#w6>wa=A_#+w1)7Win-_vy2Rg!yg7XsY0LV+wXegOlMWQ5Hvxz*idMwjF zjObM$^3HA<*mw_0y{Q8yo-3}77Vqfe=Wf71{ijwa9jMy?gox;M zeJ6w436$8RN<_?{(spb!2*a@>nbkm{2a{~ZF_uPfVE(BD(Eu#VitaePf4L2E4~zxG zJ)UDLfGTzzm*WOtu)queRz=A7{}=BdxkCVaG13(vSrRpZ*Oq~u;-E;LeaKY(U9XpdN^9Z~=%klZQw%|3(rN`OZ!qPyn15kg-sq z1Wh?p5)_V`fGG&-9fC|)D%$@eXG`x|St+toy+xM*Y?XJ~ z0XXsquR!FVz|#P9hMX0o8W_Gm+7U_SSQCU6JiZW3MC1kLOn}l0Mj;m`_S?9#%PPV- z5OTQ3Amsm{Mqs*j79Jo6;h{Zl07MDQO#48FjU|L@DHeI~w~wGZaO9w|0f!T$*A|c; zO^o3H15*{ivI$T&OXM<$uC*bLhuOR>+}45JIhcr*2;b7X|R3K}`P>z`>o3KYIQI9h%BJmLkR)!0N$7^UjG*I3oY} z5JV0UQ4m?Uy~U(Z(f|i3cmk?X|A~^n{$f<~btI zP%ZbmmzdeLT(gi`7#GjNxcES=+Bs?QPVxf${cU&sSjx|6afYWTS0{t6FU~;m} z2X^rLlTu#&NltKE&yWN`R@Vu6_b;YoFq#c}0~sZEqi@n%KBw#Z#bfn@^f2$_N>Dyn z@h9}>ZGl;Cxz7l&dmk_c;ECj4bb`SSwrCTGU0<G2p<~-4tra8pg>g!{a`BLkQXok5)BkvV7Z!9`Nv~0 zIUx`M2>^%b3_%c%O*D0MXMBd32g0Kb<|{s6CjA*O6dO#XkIKM5!0P^rXTBp0GOy9{ z5HJAV{@n)PvLAdfHUU(k00Ic*3kvu#BB7i>2{t(Mx5q2S!IcKuJjUf2vW= z0lv24ndyS^_0$HvAS@F>kaLtrlsS4%O!BR&cH1hzS_z3@?t460?g+@m5ao`|6 zfPFX-@v|=j5|5$_un#bl(5ISDVq6n?3t;5&d{Gd73{FL$N;+EUcH9dpig2UA46)je zm@Tdv1INH>1Ek^M@oXM}2}m&z)}QRHW_F&QKfX=053T8XZq-8f`4Io7PzQXm6|SUb z`Up-Kkz{Z|QkCoaEb%=Jb844FlYz$frEy`d>%3fST#k2bKNihgYm^Qi4n(aU_4>-b zD}|A6r{!G{fi^)r-{ag;^e%XW^i8{^YK&X*fpGZY9Vy4STWk!WX)n&-eu&4QMWVBu zF-VIt$K|R@H^YI75k2@ar3G(v%4g?Q(Z|eAQC$|@#?n@5nIFh!eZf^7F>Z~*MI@vq zDkLO)z;;(_HYalv8x!~|2Y3f^S+gUMjE|s}c>flrBkYi8CX{yaOP6)z1dVZW6#0je zWo0!k&WI{9{ByJdTPh4`>9OK=!co1V=dr4PhN9CHFH-iX5p zote3l;^FqgX`{C~&h1VdMtww#UX9YGa8l5498F)0rxiZ~_hZGoQ9+kY&~5iHm=9&g zQav0l+q9xJ51-$Yw0;#sDJ?K|gXk05^YF5dru@&Q=z^N>)>EevHIq|#PsR~3rK{wU zP)F?QdKoIYKjFMay^Iwt*z~_wF#@;dz+v(H_kcm$DJ{sL@HzUC@-UefgWSTu%S7Mvvp>Vx46#6`Hq}d%E8F ztOvktf+MZklHN>Yb8fHbjFRD-OVPGr23Sh_1FtI8*Y39yO?K<)6qQrF4fP#*dCxQd zIVEPr7b%SQVvHgW8vK$?GtHKUUJ~eOHw?+H=qi=|v{I6kb|`z!>ifYGRz6B-T)z;4 zKZ)rrRvp3Er5uL!ZdpZDPUAY?oL0~(rwG#1b1F2_Ut2$6Dt4n4mIX2hd}$n`?L)(} zdyYq^Uv`fXOXmLWdy!|qGN=Pe*g4apb@cr;$W*pn4I5kKN)DM`4)9U2r3kzKT3`I( zS1auKb78MRudw{X4O!cZw5qDB1EG4qkB*2Z^=f~uf8XF+?5E$TZ>&AsYmcq{y>W9Z z|LZs*Tg{Wr&BaJyOTDdm#ZZdTF>;Ey^=tkG>v_{gYjlAI&#(_RkZ&b7vWquHh+bZB z$y#l1Ij5^l^}XIXf2DqmT%!rKN~qRqq=IszoF*jx{p|wOaibs?64=czZxhi} zCL({7`&asRhg+?(%H$yJ%yYd||Ee+)oNw|CD*(?wgTJmBt=%bZz(5F>lEtW8R(Oz#tkNO*$zGs)FLHDT$rD@&ipqg-V7$bog@#-u#grJz7bk>J-#O;$AA^sL^e})jnU| zqkdgKnqpZdhpDCW{#KGcvPr~St3gJGSTrV+osB4)d^5X;Uamw8{+FlH_O3`y$msCT zCEasN4#AfH!gFqpayGD!aR_yRJ)*K!dMOx9(=67FX!WsIFT3UJi%?XYW&FA;7?uth4hE8 zwyQ8?#|x;T+8YN^Hxn65<|UsMq3=*KTe+F1jDNI`$Z;Hebl*{TVE6aIThl&Wk@qH@ zR`EZynzpvL#4O{h9zScNTiaYnQLHMM*rJ~H!LS} z;QAhnbJkO-_V5=-8irgilvDR>6Ten1b0L*ZvE79k z#E=pf`bkFJd=RP7c7Y>2&ONG;MUTZZ8jHJ!{Iv~}`cqsHt(gQ-Cd$NzxK4sCuAFt$ z7SAV0lv5NapG~Xg+5dX`X^J9;W`w-Hnld=F`uxp#zRPJE8f;7#L;RlxdOLjY;CPmp zPZ&P82m7kuWnvNaY{Xpf8OUFMJ7rT#gT-%S4*ryac|FWS1V5N zQ4X{@UaB(T3<~kn;vML=BsNnF?{GkcKu>@^SE_a44e73iXv2%Aco4#*i*t z|7@q|G2g_k@+<;ZIYz&0{A>Rq|K3*Y!y6?8w^%udE{M`(o3Z+81T!;X#qi%=B-EZp zsgVTAt7s%!j?*WOOR55l8EQi%7uAC98d~}&llLS0U;bUA>wJ#reHfLaxc~4C=Dru+ zJ(*JV{0XZ1&NDxi^{tbT*RGJI;44?NEi}@6VKxabJNF<^>N5Jetc%}Zw|L!E^supO z0(mAdoWYuDmhgR|<}S&%T}eTa&dbf$dCrw6pkz4?nJloSiZ77=l$WqFX%Y|Xv-8Z0 z-(CN?HCF9$pwv4(B_d=hA!o%|!f6=!urcDC{KZ*n+FSc6`IP=_wH6Aq`K|m%7DCjQ zgmuvI*xSnLh#k9rKG8lhhItw0_;ujYIx6%J(|%=)OH9er=nmWW#Qwp0VG?&Y24B)@ zy~?)JQD=eZYZgW|{&PoD!V+~oA4BodQSK-MO{qTfE_iwQ5j$VX2X!*#Z^4waas78;wX0RZqTV2oKV#OAHT2O?N zLqQy&PVjpVJkwvB4b~a!7|hk5a~wKd(Zsl5#jHx*I*}Zo!jT>*5XtTlSkq>+ zU!%&GYq}@NqIOTj5E3kKB$d7k? z?vq^E)rCT}q?gO<14LRdZreB`#lbT8fE~!kZDw^(vO+ z3#KH`ObnIhV9E8CLRnUw7#Ck#oa-TjM1MH$vSE?|2nm{H1#Wy?7j@R2N5W zL%Dw$_}F+g4F&@i5UEc^i}5t`?w9eJD^2 zex=zXK2P{Teg6?f7st+hR7*-j?3sNLqz@XNWCu59Y6zBs_L{d)SKebDv{YEOQU-)& z(h?I^2$LSX@JM)6I8EmI!tv8eU{l~FtQ6~kH48tU!i?L}*^UkgyLJ>UGjcA2?{d9O zMfP5B>&_}RW9tVe_md^)a5XDykj@%@YH%^xjYTcL;y3Q*m1lqxrbA&$z1DOUJI$q$ z_Nq+oCZ_hI{ML^9gc2_gm9q-S?`gPvz>}B^a{Xo&-`nlQFmEM}Dy^HHhh$ndGGt{P zFN^U=EaQfN;EgY2;^eP*2o)$Pyvu(}F3#HOk?nj_%B0i2@UqME)t`AY+h%>0f}ZBEm60i5s|tM9#s1vu z{Wp?+F{Il^Hy3>}{d{ZnK&Ys@d-+}8g?ydaC&LuOrFllM!;}@L{qs(J<)lByL)LCi zREl}Jt?k=BgO$#iq}T|A)DT5|uA~+-l#`BFx-q0wKpchA5g?^ePM32Oy)sJ)Eu2pO z|1?P$DH#rsACZAC4JJV3M{@%Q6Ju2;2Mb#>C`~r1kJ*m#<37O&^Q3x#G;uC_j&7m^ z-5S=H<1V31mVF@C-On(ncKyTk=u!5=HNhxmZCu85oIo8a9BecGq;>(WH$92Y31Jso zoO5R5L?|&Cks0riv>$LB)wu2~^U#jklWs~%lk{Pk@0&WfarTblRxxeGC}oQ~^7^eBn+bKI18lVgfyEhdc~odUB^An86ihUuG!c{Lwib1KQR=Qid% z9shjG60d!8M^CFYT?;3P9#tf^`7K|DRwh035&@I9U9FN#w|ny(E-vaT(-iUn9GA3g zBK7!7V{8t&*LLPaZltXzWB6Q+AxvxKlUvIz&7F*q@xe#G6^@iOI%u9?(aMaI=iG$4 zdHz|*FJYu)Yehx0R|i%CR3#k#vV^t^Jd7p`EJ{O$WT6WKZuG~+QXkM8AUD2$8 zEsIQDPSp7TtpMq!>j%&7FWno5A&up9QxoMk$*t2EFr|AGb199r62w%hVhoa^oxdhg zW-McwNzH!=Gm(*3Bh!L{;7B-^cD1nH_vz<-@9If{glQBcda37Af@VAqjXzx(3*Vl| zN{;*JHBo*m^@(;dPbtAe+c4j*&vZ=X&$y`kQN{IIKPF^WZYLMz`dNg;%uR$lrPbXu zv?!e)-x$Ahvw7k0o9)KNH?9MRqOv3QYAg3`XWm3u>&->p@}eIR>o;?i^Li)M^i25p z(_Sqbcwf;uPvjRewU(*yt*a#Zj*XLB?*tMyD5i`-2tD>;!AEaqM5Dh=~flv@Jz*HBYDtaWs~7s$(g zcQ`SdF>V=+HhF$@Z|D#8;|XD>6Q-s;oUPuKn?Qs5`Rfj*`vNI-A;L^7SM3kCK-}hiz%VXcfIWX z{CUIu(FBh-xOBS{IwkNgi^@%O>O7h%`P8lfiQiM*LMY4q*gYc8j3B!wo|O0 zV54N%d~W}-4LoG>uU}z~-^h$#|6hp!^zY`!5wL6kE?=$r9(oVE(+K)01<>lrTpOZ0 zLXy%Qd%Z1VUP`-nurTZ+9@1bm$*$w6NxT*4YjhnW*H-kJFSld@^W$WZlJ_q)gs?oM zeTec}x+^;UT%AOOwrs$zKCz` z{rT}^Rf-E3bL_=06^0(frdIaxH$7crJj?+@&`KMjFYx-VaLfIbb{`-FcedkT`{d|B zOP?nkVbFIEoUS5y7)Sn<00Ec@k&x)&B(Mj{hm(nes)>^mSV!1Sz2{&xw6I-{>X4aH zB53|?ahTO<$c$!d%0ZxRNGdzitRUNWGrGwqgOIO?fmi$`9j$ygDXG{umd19Ife)}?ls9!hZiKN)7?9lXY+2qSF5=bq&hpfCkSSBf| z82kJcFL2+%^v781qHLx-U0|eiF5lsO#;p)E%&7tX+Q+RlLzc@~;{u0G=xX_O>bkEw z9a*pYaSkf!GvDDT=wxe7IyYmY#q<+v|Iv56>T_!NYxGQm?RlE-UXkvG52?oVeRm6A z`n|5it$(M6xG{Ga=RChlwKAI;S(bZsexITt_ex&jCWCJ>dtrUaj`@*i(Hv&JS=`|I zDsj=oGJVE`l2aRSX)AciXlZEW=aBEMcV_BA0~f6B-WpIXZ_~SCK4+)A9d+yCX`N9vdKd=`WB-xBUrKgfEAYY;~sq=Y2-B&pQpIE z=fp+P(2%cDoxFMW5KRc_tRe7{^<(y@|111C;rMr1_34u|*IIm2bARYt$0~St#3Cmr zeQ{htDW*7U()rN z$Lcyb{2WZc4c_XW{3TJt^_(}W2?vQ#Kk{j(y*j|k|Qy1-*)!J=ehx>>{x%9Dz zeChulV>c*t5NvTZwj1;LLr?DZZfne_`_D;tW*URt>ykh4&v;y2Ac?8uKQOUX8aCJz zl*&BpzoI$gwyb+N>{@=5zP}j2VU{AXof7r-{;$agOutFf-yF)XA9BopMw?GUwk#|b zuOfU)` z9JdCT5CwdC83_&9*v?4F!Oq^1&B)Hd1YC1dy+%Q1c!>lw`Jeq`t)e5_06ca?e27E4 zW;5E^s#bxWfr&!zh5xBEZalY#7prw*sFqLOtn`&#`A*W+PT|ZwCq4B#qM+#DgfN-_ zX`}!?@wZz(Rjl*VFHnf$@p3E)Q{Qp z%Y>cQg4(5Ih$^L^sJK&@*v0l`IQO6qc^s*s$w~AUzv$Ds+m=pP&R;&&Zz*vEVyKVE zc*Ri!XtrWDaJsfG>gBI=d{irWLQLJYaA$txPSn7if{!}M&ZI};cHWf-b4dgiNf`!0 zn31lep+(dDvUVb)vTUf2F$q7%) z>Mz&bQ_?9bpd!7&DtI{cIy%~)O(>e4_?ZCHD`zb#``cZn7Rn1MA3nY}a&;Q6cGQx7 z_K@ZBsdmNt%KfQ}Ti8goM zjDl4#%=`&a{|^5QQ^XT|WIT7Vo72(kB<^<$>lSTR&bj@vK9V&@VrRdCDv{5ZIhvh2 zxsj-g8(hv#NFr)z7@~2bAGccHaM3I z1{>`jq0_n8{k~ofv)ozs4TSCC3|z4^xu>GcQ(R z#029O;0R#^BRZ?19NIaD(@+1rQ{K^DLiEe?8oZEwbWgN`V$or)@d?{QHTN z{D)^sfu4pxE#>sHvL{m7oX?a3EoDwiIen}9M2d0*B<1vt@6!TKU#ve7&>as6IJtCx zy6frdSSMZAQ{Y`sU)4G-;q*fGL;}Z~(=j-6S$kUG>2=|WK(4fZBk*LEcv|4;Ro00> z-gHRdsWsM_Yp&BmPfy+d5}Ns65eiM@PYeC$Ebv4m5|U^(64JlS2~T(bXNCT|`^>w) ax+Chfk}N8aL6DH}fZtglK}_U<@BR;yWKmW)KjNA;d6`i6V-~q<{fs78DgR zOfrQKlu3+$5E()U5s)z?0RjXFNnT<1eSJ>f(|ymq?|c9E@2|lxJF8Z*ezj`V+N;Xi zm0g!%zpRrI+PHC}kfPIzt3to|69Hs*A0oG~e+>zo8eXU-=NsF3QX@YAybdQ&?U- zk&g_5sI@#tHEz|=GeMj^;vH{nF#BcT^yl0V-$w?U#@I%%_BEqUlQ)F4Pepp$ngyuv zZ#)=@u$+vMK)POg-h*CO9bp9bIN_x)w1@$|J zRT62eB(Ytal`k4?P2M-c{Is1^9=DH|L>x~^k*um5@xJ9ayP>68B0|~KH^k^b*hNET z<~A8sdxL1JjAi18KVt$xXk9BLbon2KNgVh_peG~%;qBpwKzJwx!aZXX zDRI5ZTkf;CQjb~tgvHjMvnaZA(|kf-go;0RNoAi>oDA9J&b2Vkr9H(kvxwlw_49@` zPZzaS@tT;vp!F}FO6{A*$s$kXsyI1HC$Q)hs{7;AuHHz3t=V_-&Y^%3anjwZxO1P= z?+Qd@5=HHUQfp0L^xK8_MB2TBqI4#D`FjX%(qCVXIO-2cxQ*kWb6`y{7WI+ z;f%^m(;DPvqYU@#Gb&S4WQi{_)(tAiugSMJzG*7P966^8elil$zCmk*h$(UR-{uGjD1z*4D`gEUToJ2YU0T1Yh z+?IYg6QJG3_E6f>q5z-dXdSc}T*^E>0J`!u=6<@w;N&)uW^8=j^_{WzPb;Kw@o_AO za5~ox{WU5X8Kb=w{2aL~tS}oV`}FvT6Fwk z)VNn_KMGEXl77DN5Y{5*)t>2H@mY_OwF(nc4vfivKD^(*oV2TVYrT}=1>apQ`yX2< zS(_Z&fVa6ZUT2?CuQvG$440~6d?qOV@ZcjM?v>%wmW$o!WW(yG=xVNMCZ2pCg}NMu zdpwEM0%_JPFb1FJTxGNzJaizlJ+e|m>}x{v;YF{od*>cj8PJ>~kkP`?$5L9L6USXti}WYb+R70kl%(@&%gFTVCY^5KTm z*?n8`RD&Ggt)p~{YoH?{mHvqn+SxL8iAlhQ2_iCa(CJaW(wJL4w>x^^>V z3n)S1Y3$nP+UC*MUs&fDMqKuSTUNlcWANaPQ)Mswa)N)o@a51z3>Veiend^ggd;eT-9a#8+P`?{?d@%!9wEHN~;qty|-0CyYOmcfBR%?-av@8bH%S@ad( z&$JA?z-f(Caq1f0g}erPCfa*EB?rs_mN5+_D{Z|=e)6)nN&*ERc9?n z7O!G*sY~aKWG<|y`C&BnLYk7h zW6&Jm8__!jn^D&KO#0!G8(kvABp;R3d(K@xD&-HsTyOU z=JCFRA4`2VZPIgr!Xg^FC%e?$Htbj4ciYGjO`z(`N^Vt**H1r6VaI*-c=w#UN9m1t zWQZNX<2kC_x8vCBM`O~i#~x|l?%v_{`N_pBItA4Y*-TUBBUP()x_w+eSV&wyvUy4? zTEB5_!U=qSkGqqmb$rf1;LH!>xwPoJ#wBDFH_&)pr0|EUdp=CwKJFo;`nU-b`APc5 z!3WI;q8*ZtcQn7gyk_Uq^RFBB-#YbTzho3r=(YqYWqb0)193qQ4njIE_;}m(B)h3? zCdQMu^pM9o3NJosBg9@yd9oes7}f6b*x$8uO;v)`x>nfpv5||Cv8h70tT)^@mFxq3 zly4G!Y2b5;Sn@$w<$Q^aesR&ccE#vc7m@yTdS~pCE*?q=*L_>Bsd;dXY`HG;z41;; zP1}3z*8{t*S30=oK`pNSBGa`~?d8c!m!)o~+EG~%CTE;GiLJZWy+8R-os2Hqd-nB{ z!uDTEb1%L5u$zCiKmVwk(Y+3zl)FDREy5XjAL;mR~bQjv{p)kGcFfP-_+{ z5|htV3woKc5F55u?c4Du9(x1NgT23g+h8%b#w+Ey7i~y{aLd!hQPw?d^nN|RY3tIP z2wLP|kB6f`pPq!d8Od}P9r|H>@mIGyw&ZiANft<$s?BFt`IPfbrU9AGt%j?3dyeK%cJBUgWT(eA8o`V4=CIoYS&QW_hpE9V8-k5Pv1=t?Oh5^hP`Q_ z3|={PV2pD6S_m-_VRYzK!(3ZQyxM7@V;U#I?G0+BkCR+>*@zyx>uM^8?%<-=tn|7d zDdT6yfgU#qoK64ZQ|+xlue*V8y6la($XgAIuN_l;xC)}^N>!kkklyzA_;9Mo2 znX&7)3qsrz$_&`I~29Uw6JK`NmLx&VR&Lv)%SlBJ)^Elup zwN2;Y|jzkc)nIqwHjp%0ErTl=jEH+^;L&IP^1!`W!N zb@_b_a?s)W*9V!RHl?x+AMifj%4$ZECvsXR+A_b!H;_Ek-4FZWj)>)^Y|222Z1%7= z99NurFVs|Ue9XK*+BKqS8)>+al_w;lqZ5F+-Y7jfB`HOK&b&O5rSeKCb-tC+y*; zi6cGdl1#XeW94dzks2Bq+FtjLjD%rqAgr|l!AsRkyd5ePRjnmK;p z*WHCCskTNssmWK)OUOk$eqOS{!~2XeX88_YylY^~@uh&&#>SRL(NET{E z&nLe|Z>e+8D=^tTMgABNf9UIe;!COcHL>STdYkX9+_EEb%Kla9lxC*Ay26g2v=cqJ zOY45b^!GJxXg^VjWHDwe6 zWGEGNJI-VcRUYZBHgmVRz4oT_3m3EXPa=wM@A>Sh^Yn}Lm!0_TrEPZhIv?2j&(3SA zFAwj;%cKi{j27PLtV;W`6$ob~@cPFYF8SMVI{EqdBH%wG+FG>fqq5Y!0czexGUcl9 z`6atHiDS#2Y7aIB> zn!jI{jmR3_0K)lq+Zft7pEsq@L*y$Xsm^P#J&)C4$77CGff7%gl;DTUQYwBf4*JTXAxe$ z&R)LuSA%Xj``E5*SBsgoF|b{zQFBnp36C|g$6W3TL*fng>!kK(z@N+|l>eXU|gaqAv$QeYuuW9&A*lSGkMLSw?Hj^uBJGJ2r8WhY_5T89>h z(qC@NyfI4dQbd-9o@JYcJ{nwNom~8xir)Jy#l3+v^c4PQyKE=0L;reR!{?^6v#$^2 z=iBj>{f4L7`balDy+6R_Z3AWKIidsd4!)2eV{~sEmDZeQW_;LxFxybVW=n#jU`gh7 z?zuY^ZipvAnHHyV^0?_48NxT7nz!T-mbtS(zEeZ}iYzj;bvBE~iHVQ6LXw-JOSwwA>p!dE7KX7SJFTp7~Y7s<7FJf zVC}$mt-97Vp&?LRYkRTcXPIBROc!?`wvX=U&f#$v0%8NIpW!nv%~fSc%cJ}kn=AEL7!6vQ;Yj&It$EAy%f_VIQBpInRKxNun%ot* z@T1*-ihvcf17GT5ca{@}#;dBIrQ3YTYio7Ij?&t?1zI#z4c}pr^Lk)uDAHI~yBfOC zoHNu=8j(sw6+R;bhc0wajS6HBAeKCF%O1zjXynk`hlbQ)F68AVTE-Wpcfx&YI@aL0 zOi1g9DLr^@{>`);kz<^!V1EgAj8Tv(x7-$LRYJetIXIX4x^a|kP8UD>&Q&)|SNAEw zrY&Cg=|}@*uK75TLrCM7YAq^%oL=snWHbkx)*YvL`%(E`M;50C$S&uNUmi;yO+A^> zYJ5pn4kaTdZs)axI$?B~J@5fb93JODTop*rdpSAMECNNghEiqOK3ZarL6p`7>YdMhmERiL99>SlO*^vq4Gj%Ws2Jvu~1lTd-=+121JAja5sSfGp#29C^f%wQ$UmcZ!8;v} zn&~xKMqn z>kJB)M+Djc@(bEzaY;2`PPXhP*!wF|tQ|>HnK)5F4}1YtJ`hR0k7lYZdz23}QSS?S z;R`HjQSm(PkGd8KR)wW|=oY~gSKdpcva)ip6)Ir(Cs&u~WirQ$OU~<3NY1X&C=_)# z_(@HL=L0=;@m_Li+q-tNGA3aj<>=1iP~UgT=FwN^i=jEH(@CsVXdPSm5%lTl{Z!wUZ^~?x{#w%WpyD><-S#8mWmqT z(L+B^w18^=VCm@Rk}ZXgaHwTm+kO4?#{^?eDD+vh@@*Lg)i=AiuHsXUazXwpI(FxRorR{2*sSsn?^jV zHCO0UiBk6;s|%GvDGPO_bp|>1A6cmph!nTf zWAKvnvRx##|AtuB<7TZ4k4`UJPx^0(y>8aW;Q8rg+el@9AU+Yy)Lx=IbhBoZ7NnGQ z{!MJTM7i%qnJk5;l>I}o5lwf_gV&Y9{d?66DK0A_!@t+xkm8jGZ~CvqQNp|Tq%x;o ze@(dNOGY8d|9Y>OCS3T>iG{9!L7&6!$qH)g#fF|cxb(*liw*>69@yp-$@IT)q%n@l zh`AagCKG1?-824e;6Xv%<2YbJbI*9+zyo~UV=>t{jXUVOPpD^)1vIN@-(h`qCVU_= zb9P?(PTT9kxw2Vd3ZY!WJ$zrXC(k9oLRBu6n%xrW%){G#CM*%}_#x;DQg ztE8ls2^yOM6>5nU+YX=^?4lcA1fm(`qc7?}vt<8U*Rr0>p3p{oUTxcT#wH5K~4v*_zOMjom zeqW0MkKG0rUKfEnh!NW`;0Jg$Fj zetA|&c`Xw>HU%yW6@i9{c+$e-Xlv=^S?uy!K6p$>sqnT4^p1$<_wcyyYmZiBsaDjA zDUEGWDvS_;-V^a02#*_B>rs*AQ&B6cG`3f%@PP<4O2l*Ux!2(S)QVTB6`u|%O&n4x zj*6~|ivGW;4$z8hL2seR7(24%8vMIUdX^)LkZZZ|PPm~UPyR1tX5ju*!NoGojOG#D zBt~3b@nXC)Zm80ee;4>jB~@@!O$~WP9r@VE=9`ht4apsTk~_%t=c)DQSJnRyW0LGE zncPz^Ppy|%L+Yy|ql|1ijBFewSJkUA`BMquCz(vHcc#`mt067bkxz|mx{PdGB$HRw zt1lIlJ6qSSg(HRM@!C0Es}G5MJg zPVrG8fzvKJ_Gq=0F$JhSxU~z?+8sSiZupS8I2nkXUmC3I!sY&iO)c5TI1~uB{RR+8|BDor#Rm93(BB$ z(}x%5J4+Aig1bpaYzP!7s6D*@$(G=addE6<#;XZ5>7Cw{{et$+G}8e@n|Q11D7%vr zZ9hsXHWoSlq$243K4a{5x*SGVDXtq)CI_e4VfnKt)%xg8|M{U|Zi!s~mo_^?*ORu1 zosQ6EvWvW&T*jByxV+PCdGZV6H|A$X2^lhi1(%`>v_;BL=VWJ7zQ7yhJ>we`3>8%d z&yi;)6U}&&p+%Lq_2iP-PDJAHqN7jH$B|j3ragNgcKBzQWlvs%qu(_0jd%+r zE?yVSL1ts35SVr$~~FOi;Co03|7g z|8mAZEnjX+?!mPXOv3Agt|+7Go3rKZ)cOR^S$4Z%DIS|i;3P-W&6CX`Iw(Tu)DIp< z$u1N*H#yUgse=-52;50DlS2#fW6w5}?2 zvF63>s+SgcST8R-J~dLVW@#`#8kF)EL8o~# z#6BzpA();d_@Ue0W%B3dt$FiWtUc4C2pu++_au(XU7Cre=bM|`_lHh3bao@+8(A}< zfy}T>d-OEzWKXv-RT#uCs(P zI!w%Kv$yR-F^5UIwxK8_o0}YvNm!(IA`o@unf$55c%4vgLuTmgj9!|Ue?+KSm>I$0s)LrA+8`PBp-7+U z$$n=PyQPIq$q(h1V+Db8%eat0|LI{8B7;_~Q^%Nl_m03oS8C5Ru?T^@M>+(2TYfSY zJ6#ez+NO&V>=@>8Y68Qosdm@rIW%rtem+)LFgVVp2*1$^nrUqk1agMO>Ga51b7O)3 zTnlw*X1)X~II}!GG0}!4(YawWOHox^H9OsUNM;S6$ex#C5jeAD{NceCHysZaYIy`k z3z4GQ}ajW$5GsieL9=a6`}s@PDbTtVdrvW?{1p*rE+5; z1Y)NX!4P2{u{;{2Ue84=?8kMsVDz{$bt4vH5*rew<9K zT;Hg%eNFJ_B6l#=T;1HBpxvFSFqThrZBw$-3MS(`P`p`PueLxgEg8b(b30pTcDkpr zauezSq|DGldtEJE<~9oDXqVnQ3raj1&z}$GwbR2cqnD4ym7DL0w?(20KgXk+7v~e$ zk72D8#LV(SvJC=KDa%zF6{a^422mjmyiePR##08`2yB2Xu7C0R@;Y&M-uxA?v25ko z;&(4?oly4O?=25?@Igz>dfn#eFxCMeXM5nSJjyaly?j>yB)fY+ptYG0yc5M! zULLBON{t*S7q8RR-Yi&F4&^H^GaVLqbyE=WIyu?<=&+r9hQk6Ua)4w^Q6QzAqPy5`KQhPMIhsCNtP?b)g8p$xoPTIJMm=aMd|@%wI*HH3Yb_9GqFG*SM$Rmm zqSDWMBaBA#2N>{?0Q)&uU;Jf0hf-XFzW022({T4;!Gjs;B--<3$Z>sNwl10 zkUqt47anN~OpJt(=Rd*bKg55t z*YeI5Mu+Km#8=;!TkhdS-tV4r+JRoUTQOipoqBU&aocC?75>&?^}~eoiwa5T3yXV( z0}d1P7I!4+W-TB6Ovql={G6Am#(BeRNB4~dG%fI7FLNUYO4PGa0*RoVvzID3=`lY7 zW}>I3z7Gw2klP^YGxbz!p=~tP{3DW%*l2;^nJUOy?}d%oF&WQv9sH_#yc06+i21B zS%=AfRSEVO2Yd9WNS!Em2IHMY0oX{{+ZW|;9f+5|^h zVrMa;0Qf$o_;G*n9q`%qTh?kF)@p#4yS<1Pf{7adSRKDt50KELyM&2>vOj6-5==Y< z*plF6Lj<`VlYO%aoH`Cp1spLdcUHwaO9ERsUgr6-+!KiXaVn-|7GnfB@{&^gw7P;+>@dTSl2@ zUb!c*b4sZg#w-R7I8sI_PVX;{1sw6WE+bi&0XwAEi|8LrR0ABL)FguN&Z(?JLzL#e z-&iE}7vBXekkXzF*3mF<0!?ygDvoH)|~DooP}z;1ejN&?G904;+N87OL0eaw2sk0 zyn47*P=f6HzbvZo>KQAGWq(=J06w(_7R&##r~`aTNtfNGbBuO6HaBGaL(~xBIqGA; zl>_5;!M6q%q+e%FrGL9vl`Na4!FQQZ2vt9kz^*~eDCxtNbvRQkIb(lnpKe1`Wl;R}eRd*?kcvl{gY|vY zdY`r+?*C|ir1$NSUe6ZR{T~C5^nN_j8{2}2{4xDVZ}ySi!WLHKk2R0=);-qSxE1l> z$JWPsQjhg^Zlym+(l}^xI7<1o1uVDz*yA%s5&8|m`{l(RNh|9&-kA9C{dt2uI~2d2Pr3RQVlr5JF>kkGrhX`2Lqe3Ybd&gAf802vK&GB5t)>GSsp+t=||Na zyr=RjfYdkGqoDXrA3z$L44%@@zP#ckfHc_jWCfX&q;b{c@Dl);4|thyreFmrFE56X zdMFPdLBM^NxtGBJ(hES!-}7EU!VLC66u-d$q`k@DZT;-)D_$l_=oxO>CJ7)@k~D6Z z9DWKQiGY`hXIfT}hvdbcNj*FSAdf2|zvW&&u@XxFdFWp83ew16kGkSFBLIm2VyT~f zYsE_dd1=#=6=YhHhOf!tbO1>Qyi7d9SV1bti)BbXQ~;1#ipbgA%i1fk1ds~%W>%2K z277cBzZnBaG!RRJ?At3|CQ0aB-n2~$KxQRrM3@}T29P2z>W?Lz5xoZ>56g=^mwI>@ zK%P@XO1-#zekGO$QFVv!scZs}R}A*(DSo>GAmf2p8e~6O@e)9qYaOBFN5J}oslgs2#jB=(b*jnWEraYdz?zXH(PX-5ZpERzB#kVS z!><5`&c3MM`sB=cz#-@nd9l}021fv-i6YYQ#br|fnE@b=+h$4hIL5_hPVEP0$lDk;FHC7VdoxuYE02t`^jp42i*B)P2l#m%;1~ zus9;K{g4^G@LNTl$vA+tihR*1gE5G_r{B4XT#esZ-v z%g7fEGMEcMcW!}#z|6wqK!tGca&QAGL_1I+O2lB%nxI&qLOk=cu|DA1k# z=!LUDg;+V@TSvZVlEGX8Dg+e@(qg{bng2<~$j zU#SoUbsek7)mZ-PCK0FOu4I#X{JlY@T?gATr-_PPgpTjPoJ0E{rr!pu;%mONe zgA8VCfW-!&LWt4}V=C%YfO7~pi%92s8O&**LexP)2bhJMfeNv^%V8HX()p`{Lr0<5 zDsnZJ|H4VMatQ zqM%M?NQ{^ZR0ua2%&q{7LqLTvq8EMvDgJq!5Gx0K>quwdqJa@mAt+FgCbQ5Js1Utf4rHK002d89%EX9qnxIsm zLX`Pg0KXe1uT+SFy5d#jYApYCljv_34gUSII!Y5133TT;KZ{F!4kv-`?EALP8#v%+ z0~Nwa1|u0@AqG?k8G2z_MV&Wr4l!;KISgDhI15yWCMZaOS-1zN5YR4%lgP;7m5T;N zV#HPCYApYCljv_34gQ6*T1*BbZXf1{M6%g=>c+rrufuc0(W$iR>dNZi=?OemDMJSr zI-O@ulbJH^PHsc_g*?;yJi3D>vzVVxCkm>Ak?h$;;8xf^8yhtG8;9?W4D(rBuZs-9 zBpVBSr|Eg!=&EY`6gwJ%U@@A7%XJ@MX<9o2&^498L7Y5_9y8uty^u4RryOr_k_MK3jE>V{2Eird@v+k|o|v~Z}UVGi~YL@7g8K<@0er=fU^1H8eB z2E6dxC7G>sR^9)N0lN(oIk94{#T^*;K{Xzp-rs>09nP8RyyW(+U2?EQo6A5hc_K?KlrD{6WR%w3zrZPRo=<>fIxG`RZ& zv0Nf(O#YK&Wo;SojCZ;eoiJokO&@J@v2`YP9>(o%Q#bEMT;Pt93CH`%UUTl1-_&{4 z-Gi>`di`<9pM{5PJu{eP-4s_Y*SLHK)|xwYWc2Q03B5XS347eXsFyc2IH69gH77QN zm7kb6z!*FLj{ZM$jINO36do;dZz?cXO6|~GlU;`}! z!truCfxLkx@isN0gsd00*^4*Xj;H0(_)e|f8l!=qY3g+IZWdmr5>*p6x7aZd&F-8_ zT@&A+%T#l<_fqPH`4K{?o6f!P^&}G?Dj;uASBGVpITg3 z%OaqB5IVX#$B9%FUV?Ze6nB!MYrkZ`Aw7WRbeGdh`!JBM$n*AMkj_j@>huVY{-VDh z#7?Fs)7it5PMWN4%rxR1^F!N9^ztps4*C!_vO(M4)|L<;$f&94M?ma2em-|I5Us6U z$#UuQ8lw#pnXq_bcgyfJeU9H$Ckh44wJ4vYW;V?&`sIDW=6#V%_3mpU@METf8y7ys zw6l`!(Tz*NjWdsTnewE%Q)q@{9hKqg%0^*zDb;ecj@%ro$k_idsEz{6MHY_xywb4XFbND*}P6^{hkNUz8ae}Ug%Rc zN_p8FONt13#uWQz&lA6CEaBo_rFm8N^wE_3apra2x`OLvFL8BqlBMB`z;}9#zix8z ztkHBr^RB79^u!1rvJX17j^KRefiLK%vM%+md;wmg>9Im6BVVG#xTP{mTmG{s?cclM zCA`N?I;G4Z4}QJ(etOv*xBp7naETJ`W<6O7PAU7};xe|_zjwPK#W4^5p%nawVu63} zHA9Mf9=xIS??gUYSrdNrB^;PP%dz*`--{)rGKXF@O}O++_#cUaA9vErL`h|2H;OVm z^=~3By-bEwMscGYga1P@9obFx$>rL67}<<5U4e$ch`$Ya!& z%J}z+8B*Nx81<#;{=Jv}oOq+{dLE;??syL}B<=CDqF*=~2TnNYF_9PC8^x$YG2dcj za80{j?~;M075i#*zOGZWjx?3gOe^-+=&Y<$3;`Cj(!AFS)*j`qYw43G&aSIDo6K7a z;YzjK0<_2e`mXx(o%?N4%wxoj1TMKi_MMnd7Hf`}oOp9elyQQNa#@8RylP)il zA&+s@&vT7pSawWXI)-6mw7ULU->B*6o$(7&krmx@@Wn|TH#meys#utO>c_AB*Ouc`Lu&Ltnuos>Q0K-OBMj#QeNYcM@nd6`1_ z?VkDyo>8LK9b2s(8!*0&n4ThenPPd2r+%Ji6xh1sn6+aI#6>Ht`*xGRz z<2!=ssg#$glE--I=XpgHSa%dzJ2Ei7OiT|>UZz@pJ3?Op5!GVd(QfTHhw+`q^x)-X zYUD8p{X9ez!@6VI+L4Fx#l>DX%HxIWo;Lvqgtd6|#$m|OaJ zx1zu{9mi}OMU#ESl6&gpW$NX(BlQ(lCT9BodS;!)xUin(*dAt2R157P;~ldWF;Y5;!`Sw zyW6_yJlA~Q#B^Ogb;MiH*@-H_SL+1T*rmgj2n3WShl6V&Clk-fy$;2rC@pM;7n?Ni zO@N|{Yx=MOtSXJ5%6-~NS#mnnta$8iU7njH?z2iLj`~K?PL7{k>os2y= zdWPyxc>6ImAo4;tt`7ICuf*6wR`&jKXUY$7lGsEjM&FcTTwDxxs8wu;nx7 zJDBa_Sg{}DWEWtVhSEajFHV1*W~6r7_siX1a1Ti1d2%OaQb*}TEGFNE+3Zzf^JAhg zA)c9zRcgbW#$x0bn4xpCku>{^Fm7mxJ;64mggQaS;RL>6DE^HQWYOkA(A@C+jBEZ9 zxpSl)uQ5CCa*}42;e}O;q$G+Z2b6#^<;=hT@MKSti+?0@+thLN08=~|?dLxqnas*4 zX%a7Yb+z9kY?1MZV+VmCE>tTL!g%}}M2b0uD&90YF)jFI^D=g0WTqMUy zhBV_JbQztIHE|{MMcUnR)YUK+%no%9H`C{s{v~*n|1(+bliHT{neaCCZb(Kte+Y-= zD_=79;^foWox{KkN0YO8bByuK3;~6t4s1?21W1==?{GTBH4nn!rt0dTLPO@g!`@eg zmEtY!Ay^yF0P}p_j4x+!n$hBghwAdbb`B3M|IiN!ecx-7*`GcTk3$ddp+rZwke7%I za(@2Y9G`g*H#h7~h(U9`eSEk~Pu&awY*dq0&<~QEqiV^;EDTeRvf7eA>y6@i(->vt zlxSW~38RzJuES4a15YCwt%h>VH{h%os6an9aIcCwF_Me&sU!=0)23$^Nkh$o8qLZc z8)i3-0B=jCdlywz+d{C^w{~v{wk!eCCp1hzoo5m61OTJK{Ml)W9MFcAcn%B{XHItQ zXuBjx<1Zx7{%B6DOO0bKX0|M~Foffcz3jbcq3>fBCcOQ)%$TOTf+9*98eeG#(c|FE z5#oH#e9I0Bk)RY(6k4ehI)LsbzQk)5QmO+hH!sdDISTkm+)fVd9i-cpJGU6A%W28y z4HthZ*R>5J;6u^j?74=C&SAdt$KpPJ4s(I-Jm{L&9Vvsixm1Zi37T$Lnwgo>H#Tk+ zWAWOCmkZJ|maD0DVIgHzHuG-eJK`CF?&&6U$ZTPbJr>nl1I%wiF&8Ju*3i7r8hfB= zoaOMSe#gR zVfk*Jl5XKYkeSNn5uM-79*%vb8XQJ2CYmkMmkLLTL}Ghpvd1(Nm@|#m4`+ANyXnMX zY7Op)feI)jRDu>iBuH zyjRNSP4jLlpEu7NQ*OANw^O;{YF>)+`QYbqNDC&(r%#$qL&u%->9Zf9g~b{A^ktHP z_pFnB4-UP#>8<+gRZg?0+w+7&>Mx?Kp7o_1dgJEp^Xyd~nc?;_V}u*BBt)poeeS~J zRDJvADd;+3YR2Z7h27SFmA}Y;r&D|IYF8-QQtrBhyGIS7KwSCP&J#5IZsC-OrDrS_ z{TIVC_hPvsTp__4gIG~q(doZ7Jhb>_r#dgsf6_!#d(Omy{hdTkl=Z}dzx6n(mtA)H zuav#91>bty)yqtr@~J%ru?7B4M^BUi$^`|>{}BK4=j2%Uw;mVuvMWxh)Se5maDON1 z6J`IQ9H8wil%~8YYVq>SX;i}%#qOp|HmbRMmP=D!7g4=D^BVneMd`aKj7I;zQ_2Wj zFw~w)u?&AF%@bvmSjM*=2X+6;PLb4})3GxCPQoYrdtzn&P`RLfozW=fK3OQO`KpNI zHJRIZ30IW3Ta(dv$$hd^TJ!ZkRGxFYuI^u~R(K%9W~)n)>d*G<&(`#3>-4kr`Ptt6 z*(UyMbAGlZKz+;7`umpNc3eoVxlqxyrs&*cLXbw5nI9@Il^`-+WBS&!rH z;?Hd%7DgNbjUNVOZ-PNZ zU}GN>#OfqI7v_=*Bh*0S8lY@37*rfKR+k`FFR`g8SF$ML0%-gqC|d#sm4uDeCx|sj z7!>827DZeGjaz`Sx5J=2U}FslVvQ0Hi*gf-B3wY@H$mCEVNhwtuTvAbl zKWIDF3@-nC|eB%RfmnWB#5<2JS@pg zEQuHajgNt{p)jZ>Y^*gwtWDx`NiL}*VjeWU0Ls>ZL3LqcZ3$vuB{r4jN|r`!0FQ43 zXP<#V&%(yOCWy657?kFkmPTv`kM9I$Uw}dNU}NnGVjU6>OLG%TBMyPb4}-G}U{Dxr ztRq2;B=Na4msA>|1|HV{XJ3LrjbUS?1hH=to8IS2zK^&79={0AHi1D+VPoGC#5yGm z-shUWkGKXNw*Y5fgF($HWrWrm!*U&=eT`w=9HDh=##?pa ztuA0OeppOu$zz--fs9#9N)mUh~6VYtLU*ug2uhB*Y17 z{)t(4BaXW$-im~`I*aY{#ddwoUsbQhulE`zt~##`xOyZo?S?fI+f z)tLO5gb=0Xi_W^A<+%TX@BNDJJ%v^C#j1VHUsbQhojE{X5`hVMOx zRrABDwdb#@S7Y*L65@pd)BY5jZTz^OAlf5PNPoNMH1VDzqJW%N!z4#Q5Ylbf~k zEaw^%X8l{7r_9wA)bms4n3R?_x-%u2XL-R!4%_A(-onQ*bk#?>$xX>|#xw?hX8G1b zgnv_KTRGw#A*8Z~@3NRgJVAzI#4DkbKT1f%&bdYJj#Oun8iGwaZ)%jzM%VOBcC*w+ zLd&Zbh9@!$AP_>2oh?|wqHHNRgqLs2n{i=J9v3UYQ(Eog(%=ZSNMfRx9LvkP2Fk2$ zUK|;8B+t-!=BZQ$1cujLZdqI;5ctC(^ULG&%gfj%Nf7OkxGY4R)fyPEz#9_ZVVzM! zW}-Au*bIU0%J|)21yeT|7{B8lSsA}uvsOw-N@(N8jY5h}FRtEucKjJrNJyx4t&ori z@c#Qhdv9k?ABfUQ`}c;j@z#u!fYIf3LPFxdvrFq!^k04&`}hWVI{W;QDdMQC&?sQ?1^D9b-lx0{#iA9@mAU|4w-*w%+Y6t@13kg!=u=mx^+ zvNz(E55x)K?fgd@;;c&hvK26|1YTQyXD%=H8*_(SxBkd_piAg>GGH|gyd-~T?F($s z-&XGDPXB=N^GQ*EpHIIXq5eI^%Ki^2KYy6| m_mtoEliyQpL;jHRb8P!EZ2g9nZ5IXp{jUW96O=3{S{MMeAov&n From b0bdc1e5b7e4586503c898d3dcc32d9260ae0857 Mon Sep 17 00:00:00 2001 From: bharathyes Date: Wed, 11 May 2022 14:52:58 +0530 Subject: [PATCH 11/17] PR fix of refactor and unit test --- quickstart/jsonbox_test.xlsx | Bin 45417 -> 41264 bytes .../managers/RestelDefinitionManager.java | 10 ++-- .../comparator/ExactMatchComparator.java | 1 + .../PartialJsonMatchComparator.java | 1 + .../core/parser/config/ParserConfig.java | 8 ++-- .../core/parser/dto/TestApiWrappers.java | 1 + .../comparator/StringJsonComparator.java | 6 ++- .../techconative/restel/utils/Constants.java | 8 ++-- .../core/model/RestelTestWrapperTest.java | 43 ++++++++++++++++-- .../StringJsonMatchComparatorTest.java | 2 +- .../core/parser/dto/TestWrappersTest.java | 33 -------------- 11 files changed, 62 insertions(+), 51 deletions(-) rename src/main/java/com/techconative/restel/{core/model => extension/jsoncompare}/comparator/StringJsonComparator.java (64%) delete mode 100644 src/test/java/restel/core/parser/dto/TestWrappersTest.java diff --git a/quickstart/jsonbox_test.xlsx b/quickstart/jsonbox_test.xlsx index ce9efa5af6fcd5edd2458beba8ed9256ed86683c..3265f1bd22b72930a76b3472c1a764dff0b04e08 100644 GIT binary patch literal 41264 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 LXv`N64Zr;fh0dk; literal 45417 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

    6EaKE~)tIl(}!)-njUt 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£(i6ia^1j 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 RSQ(y13k71iArpM}e*iQlJ1hVI diff --git a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java index 1db53df..ba53552 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java @@ -98,7 +98,7 @@ private boolean executeTestMethod( populateResponseToContext(apiContext, response); // validate response status - validateStatus(response, restelTestMethod, apiContext); + validateStatus(apiContext, response, restelTestMethod); // Test if the header matches as per the config List headerMatchers = getHeaderMatchers(restelTestMethod); @@ -116,7 +116,7 @@ private boolean executeTestMethod( // Test if the body matches as per the config List responseMatchers = getResponseMatchers(restelTestMethod); boolean isBodyMatched = - doMatching(responseMatchers, response, getExpectedBody(restelTestMethod, apiContext)); + doMatching(responseMatchers, response, getExpectedBody(apiContext, restelTestMethod)); log.info( "Response content matched for the response of " + scenarioName + ":" + ":" + isBodyMatched); @@ -124,7 +124,7 @@ private boolean executeTestMethod( } private void validateStatus( - RESTResponse response, RestelApiDefinition restelTestMethod, TestContext apiContext) { + TestContext apiContext, RESTResponse response, RestelApiDefinition restelTestMethod) { List expectedStatus = (List) replaceContextVariables(apiContext, restelTestMethod.getAcceptedStatusCodes()); @@ -139,11 +139,11 @@ private void validateStatus( /** * Gets the expected body for the given test name. * - * @param restelTestMethod * @param apiContext + * @param restelTestMethod * @return The expected response object. */ - private Object getExpectedBody(RestelApiDefinition restelTestMethod, TestContext apiContext) { + private Object getExpectedBody(TestContext apiContext, RestelApiDefinition restelTestMethod) { // Check if expected body is Json type if (Objects.isNull(restelTestMethod.getExpectedResponse())) { return replaceContextVariables(apiContext, restelTestMethod.getExpectedResponse()); diff --git a/src/main/java/com/techconative/restel/core/model/comparator/ExactMatchComparator.java b/src/main/java/com/techconative/restel/core/model/comparator/ExactMatchComparator.java index fa09ad1..352ab12 100644 --- a/src/main/java/com/techconative/restel/core/model/comparator/ExactMatchComparator.java +++ b/src/main/java/com/techconative/restel/core/model/comparator/ExactMatchComparator.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.techconative.restel.core.http.RESTResponse; +import com.techconative.restel.extension.jsoncompare.comparator.StringJsonComparator; import com.techconative.restel.utils.ObjectMapperUtils; import com.techconative.restel.utils.Utils; import io.qameta.allure.Allure; diff --git a/src/main/java/com/techconative/restel/core/model/comparator/PartialJsonMatchComparator.java b/src/main/java/com/techconative/restel/core/model/comparator/PartialJsonMatchComparator.java index d339de5..dd118d7 100644 --- a/src/main/java/com/techconative/restel/core/model/comparator/PartialJsonMatchComparator.java +++ b/src/main/java/com/techconative/restel/core/model/comparator/PartialJsonMatchComparator.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.techconative.restel.core.http.RESTResponse; import com.techconative.restel.exception.RestelException; +import com.techconative.restel.extension.jsoncompare.comparator.StringJsonComparator; import com.techconative.restel.utils.ObjectMapperUtils; import com.techconative.restel.utils.Utils; import io.qameta.allure.Allure; diff --git a/src/main/java/com/techconative/restel/core/parser/config/ParserConfig.java b/src/main/java/com/techconative/restel/core/parser/config/ParserConfig.java index 3b01a8e..09b602e 100644 --- a/src/main/java/com/techconative/restel/core/parser/config/ParserConfig.java +++ b/src/main/java/com/techconative/restel/core/parser/config/ParserConfig.java @@ -97,10 +97,10 @@ private void init() { // Test_Api_Wrapper sheet - start fieldMap = new HashMap<>(); - fieldMap.put(Constants.TEST_API_WRAPPER_NAME, Functions.STRING_FUNCTION); - fieldMap.put(Constants.TEST_API_WRAPPER_DESCRIPTION, Functions.STRING_FUNCTION); - fieldMap.put(Constants.TEST_API_WRAPPER_PARAMETERS, Functions.STRING_FUNCTION); - fieldMap.put(Constants.TEST_API_NAME, Functions.STRING_FUNCTION); + fieldMap.put(Constants.WRAPPER_NAME, Functions.STRING_FUNCTION); + fieldMap.put(Constants.WRAPPER_DESCRIPTION, Functions.STRING_FUNCTION); + fieldMap.put(Constants.WRAPPER_PARAMS, Functions.STRING_FUNCTION); + fieldMap.put(Constants.API_NAME, Functions.STRING_FUNCTION); this.sheetMap.put(Constants.TEST_API_WRAPPERS, new SheetConfig(SheetType.COLUMN, fieldMap)); // Test_Api_Wrapper sheet - end diff --git a/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java b/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java index 9c2127d..7546e83 100644 --- a/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java +++ b/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java @@ -2,6 +2,7 @@ import lombok.Data; +/** TestApiWrappers type dto for sheet test_api_wrappers */ @Data public class TestApiWrappers { private String testApiWrapperName; diff --git a/src/main/java/com/techconative/restel/core/model/comparator/StringJsonComparator.java b/src/main/java/com/techconative/restel/extension/jsoncompare/comparator/StringJsonComparator.java similarity index 64% rename from src/main/java/com/techconative/restel/core/model/comparator/StringJsonComparator.java rename to src/main/java/com/techconative/restel/extension/jsoncompare/comparator/StringJsonComparator.java index 9b5c4af..e5da7a8 100644 --- a/src/main/java/com/techconative/restel/core/model/comparator/StringJsonComparator.java +++ b/src/main/java/com/techconative/restel/extension/jsoncompare/comparator/StringJsonComparator.java @@ -1,7 +1,11 @@ -package com.techconative.restel.core.model.comparator; +package com.techconative.restel.extension.jsoncompare.comparator; import ro.skyah.comparator.JsonComparator; +/** + * String equals check. To override regex based pattern matching used in DefaultJsonComparator + * implementation. + */ public class StringJsonComparator implements JsonComparator { @Override public boolean compareValues(Object expected, Object actual) { diff --git a/src/main/java/com/techconative/restel/utils/Constants.java b/src/main/java/com/techconative/restel/utils/Constants.java index cf65642..5e03b5f 100644 --- a/src/main/java/com/techconative/restel/utils/Constants.java +++ b/src/main/java/com/techconative/restel/utils/Constants.java @@ -58,10 +58,10 @@ private Constants() {} // Test api wrapper public static final String TEST_API_WRAPPERS = "test_api_wrappers"; - public static final String TEST_API_WRAPPER_NAME = "test_api_wrapper_name"; - public static final String TEST_API_WRAPPER_DESCRIPTION = "test_api_wrapper_description"; - public static final String TEST_API_WRAPPER_PARAMETERS = "test_api_wrapper_parameters"; - public static final String TEST_API_NAME = "test_api_name"; + public static final String WRAPPER_NAME = "wrapper_name"; + public static final String WRAPPER_DESCRIPTION = "wrapper_description"; + public static final String WRAPPER_PARAMS = "wrapper_params"; + public static final String API_NAME = "api_name"; // Test Definition public static final String API_UNIQUE_NAME = "api_unique_name"; diff --git a/src/test/java/restel/core/model/RestelTestWrapperTest.java b/src/test/java/restel/core/model/RestelTestWrapperTest.java index 8a85026..c35e4c3 100644 --- a/src/test/java/restel/core/model/RestelTestWrapperTest.java +++ b/src/test/java/restel/core/model/RestelTestWrapperTest.java @@ -2,6 +2,9 @@ import com.techconative.restel.core.model.RestelTestApiDefinition; import com.techconative.restel.core.model.RestelTestApiWrapper; +import com.techconative.restel.utils.ObjectMapperUtils; +import java.util.Arrays; +import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Test; @@ -11,8 +14,25 @@ public class RestelTestWrapperTest { public void testRestelTestMethod() { RestelTestApiWrapper restelTestWrapper = new RestelTestApiWrapper(); - restelTestWrapper.setTestApiDefinition(new RestelTestApiDefinition()); - Assert.assertEquals(new RestelTestApiDefinition(), restelTestWrapper.getTestApiDefinition()); + RestelTestApiDefinition restelTestApiDefinition = new RestelTestApiDefinition(); + restelTestApiDefinition.setAcceptedStatusCodes(List.of("200")); + restelTestApiDefinition.setApiDescription("desc"); + restelTestApiDefinition.setApiUniqueName("name"); + restelTestApiDefinition.setDependentOn(null); + restelTestApiDefinition.setExpectedHeader(Map.of("k", "v")); + restelTestApiDefinition.setExpectedHeaderMatcher("matcher"); + restelTestApiDefinition.setExpectedResponse("response"); + restelTestApiDefinition.setExpectedResponseMatcher("resp_match"); + restelTestApiDefinition.setRequestBodyParams("body_param"); + restelTestApiDefinition.setRequestHeaders(Map.of("k", "v")); + restelTestApiDefinition.setRequestPostCallHook( + ObjectMapperUtils.convertToJsonNode(Map.of("name", "post"))); + restelTestApiDefinition.setRequestPreCallHook( + ObjectMapperUtils.convertToJsonNode(Map.of("name", "pre"))); + restelTestApiDefinition.setRequestQueryParams(Map.of("k", "v")); + restelTestApiDefinition.setRequestUrl("url"); + restelTestApiDefinition.setRequestMethod("GET"); + restelTestWrapper.setTestApiDefinition(restelTestApiDefinition); restelTestWrapper.setTestApiWrapperName("testApiWrapperName"); Assert.assertEquals("testApiWrapperName", restelTestWrapper.getApiUniqueName()); @@ -24,7 +44,24 @@ public void testRestelTestMethod() { restelTestWrapper.setApiParameters(Map.of("param1", "param2")); Assert.assertEquals(Map.of("param1", "param2"), restelTestWrapper.getApiParameters()); - Assert.assertNotEquals(new RestelTestWrapperTest(), restelTestWrapper); + Assert.assertEquals(Arrays.asList("200"), restelTestWrapper.getAcceptedStatusCodes()); + Assert.assertEquals(null, restelTestWrapper.getDependentOn()); + Assert.assertEquals(Map.of("k", "v"), restelTestWrapper.getExpectedHeader()); + Assert.assertEquals("matcher", restelTestWrapper.getExpectedHeaderMatcher()); + Assert.assertEquals("response", restelTestWrapper.getExpectedResponse()); + Assert.assertEquals("resp_match", restelTestWrapper.getExpectedResponseMatcher()); + Assert.assertEquals("body_param", restelTestWrapper.getRequestBodyParams()); + Assert.assertEquals(Map.of("k", "v"), restelTestWrapper.getRequestHeaders()); + Assert.assertEquals("GET", restelTestWrapper.getRequestMethod()); + Assert.assertEquals( + ObjectMapperUtils.convertToJsonNode(Map.of("name", "post")), + restelTestWrapper.getRequestPostCallHook()); + Assert.assertEquals( + ObjectMapperUtils.convertToJsonNode(Map.of("name", "pre")), + restelTestWrapper.getRequestPreCallHook()); + Assert.assertEquals(Map.of("k", "v"), restelTestWrapper.getRequestQueryParams()); + Assert.assertEquals("url", restelTestWrapper.getRequestUrl()); + Assert.assertNotEquals(restelTestWrapper.hashCode(), new RestelTestWrapperTest().hashCode()); Assert.assertNotNull(restelTestWrapper.toString()); } diff --git a/src/test/java/restel/core/model/comparators/StringJsonMatchComparatorTest.java b/src/test/java/restel/core/model/comparators/StringJsonMatchComparatorTest.java index f1b5204..5f1f439 100644 --- a/src/test/java/restel/core/model/comparators/StringJsonMatchComparatorTest.java +++ b/src/test/java/restel/core/model/comparators/StringJsonMatchComparatorTest.java @@ -1,6 +1,6 @@ package restel.core.model.comparators; -import com.techconative.restel.core.model.comparator.StringJsonComparator; +import com.techconative.restel.extension.jsoncompare.comparator.StringJsonComparator; import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/src/test/java/restel/core/parser/dto/TestWrappersTest.java b/src/test/java/restel/core/parser/dto/TestWrappersTest.java deleted file mode 100644 index 48a4a88..0000000 --- a/src/test/java/restel/core/parser/dto/TestWrappersTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package restel.core.parser.dto; - -import com.techconative.restel.core.parser.dto.TestApiWrappers; -import org.junit.Assert; -import org.junit.Test; - -public class TestWrappersTest { - - @Test - public void testTestDefinitions() { - TestApiWrappers testApiWrappers = new TestApiWrappers(); - - testApiWrappers.setTestApiWrapperName("testApiWrapperName"); - Assert.assertEquals("testApiWrapperName", testApiWrappers.getTestApiWrapperName()); - - testApiWrappers.setTestApiWrapperDescription("testApiWrapperDescription"); - Assert.assertEquals( - "testApiWrapperDescription", testApiWrappers.getTestApiWrapperDescription()); - - testApiWrappers.setTestApiWrapperParameters( - "{\"read_expected_response\":{\"message\":\"Cannot read properties of null (reading '_id')\"},\"expected_read_status_code\": \"500\"}\n"); - Assert.assertEquals( - "{\"read_expected_response\":{\"message\":\"Cannot read properties of null (reading '_id')\"},\"expected_read_status_code\": \"500\"}\n", - testApiWrappers.getTestApiWrapperParameters()); - - testApiWrappers.setTestApiName("read_entry"); - Assert.assertEquals("read_entry", testApiWrappers.getTestApiName()); - - Assert.assertNotEquals(testApiWrappers, new TestApiWrappers()); - Assert.assertNotEquals(testApiWrappers.hashCode(), new TestApiWrappers().hashCode()); - Assert.assertNotNull(testApiWrappers.toString()); - } -} From d76212bc354ec02eab4e64caa5cabe1b9fbfef21 Mon Sep 17 00:00:00 2001 From: bharathyes Date: Wed, 11 May 2022 15:53:33 +0530 Subject: [PATCH 12/17] fix wrapper sheet column name is dependant on DTO --- quickstart/jsonbox_test.xlsx | Bin 41264 -> 41268 bytes .../core/parser/dto/TestApiWrappers.java | 8 ++++---- .../restel/utils/RestelUtils.java | 18 +++++++++--------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/quickstart/jsonbox_test.xlsx b/quickstart/jsonbox_test.xlsx index 3265f1bd22b72930a76b3472c1a764dff0b04e08..941d6dfd26a24406adb5283b31085e92be378317 100644 GIT binary patch literal 41268 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 HG5+drg;oWh delta 18539 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 diff --git a/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java b/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java index 7546e83..5520aeb 100644 --- a/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java +++ b/src/main/java/com/techconative/restel/core/parser/dto/TestApiWrappers.java @@ -5,8 +5,8 @@ /** TestApiWrappers type dto for sheet test_api_wrappers */ @Data public class TestApiWrappers { - private String testApiWrapperName; - private String testApiWrapperDescription; - private String testApiWrapperParameters; - private String testApiName; + private String wrapperName; + private String wrapperDescription; + private String wrapperParams; + private String apiName; } diff --git a/src/main/java/com/techconative/restel/utils/RestelUtils.java b/src/main/java/com/techconative/restel/utils/RestelUtils.java index b21539b..97594df 100644 --- a/src/main/java/com/techconative/restel/utils/RestelUtils.java +++ b/src/main/java/com/techconative/restel/utils/RestelUtils.java @@ -85,13 +85,13 @@ public static RestelTestApiWrapper createTestWrapper( TestApiWrappers testWrapper, Map testMethodMap) { validate(testWrapper); Map params = - StringUtils.isEmpty(testWrapper.getTestApiWrapperParameters()) + StringUtils.isEmpty(testWrapper.getWrapperParams()) ? null - : ObjectMapperUtils.convertToMap(testWrapper.getTestApiWrapperParameters()); + : ObjectMapperUtils.convertToMap(testWrapper.getWrapperParams()); RestelTestApiWrapper restelTestWrapper = new RestelTestApiWrapper(); - restelTestWrapper.setTestApiWrapperName(testWrapper.getTestApiWrapperName()); - restelTestWrapper.setTestApiWrapperDescription(testWrapper.getTestApiWrapperDescription()); - restelTestWrapper.setTestApiDefinition(testMethodMap.get(testWrapper.getTestApiName())); + restelTestWrapper.setTestApiWrapperName(testWrapper.getWrapperName()); + restelTestWrapper.setTestApiWrapperDescription(testWrapper.getWrapperDescription()); + restelTestWrapper.setTestApiDefinition(testMethodMap.get(testWrapper.getApiName())); restelTestWrapper.setApiParameters(params); return restelTestWrapper; } @@ -255,16 +255,16 @@ private static void validate(TestApiDefinitions testApiDefinitions) { } private static void validate(TestApiWrappers testApiWrappers) { - if (StringUtils.isEmpty(testApiWrappers.getTestApiName())) { + if (StringUtils.isEmpty(testApiWrappers.getApiName())) { throw new RestelException("TEST_API_NAME_EMPTY"); } - if (StringUtils.isEmpty(testApiWrappers.getTestApiWrapperName())) { + if (StringUtils.isEmpty(testApiWrappers.getWrapperName())) { throw new RestelException("TEST_API_WRAPPER_NAME_EMPTY"); } - if (StringUtils.isEmpty(testApiWrappers.getTestApiWrapperDescription())) { + if (StringUtils.isEmpty(testApiWrappers.getWrapperDescription())) { throw new RestelException("TEST_API_WRAPPER_DESC_EMPTY"); } - if (StringUtils.isEmpty(testApiWrappers.getTestApiWrapperParameters())) { + if (StringUtils.isEmpty(testApiWrappers.getWrapperParams())) { throw new RestelException("TEST_API_WRAPPER_PARAM_EMPTY"); } } From 4764158d0286f5757b0c83e4d0e15bf0c27a530b Mon Sep 17 00:00:00 2001 From: bharathyes Date: Wed, 11 May 2022 16:11:44 +0530 Subject: [PATCH 13/17] validate wrappers sheet with map and suppliers --- quickstart/jsonbox_test.xlsx | Bin 41268 -> 41263 bytes .../restel/utils/RestelUtils.java | 39 ++++++++++++------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/quickstart/jsonbox_test.xlsx b/quickstart/jsonbox_test.xlsx index 941d6dfd26a24406adb5283b31085e92be378317..b9afd2dddd30769595127aa643374d9b4dcf0a0b 100644 GIT binary patch delta 12554 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 b-e1mt{Y3xWSt|OMv&8d5JC$+VclLh(=`QgO delta 12490 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, Supplier> validationMap = + Map.of( + twp -> twp.getApiName().isEmpty(), () -> new RestelException("TEST_API_NAME_EMPTY"), + twp -> twp.getWrapperName().isEmpty(), + () -> new RestelException("TEST_API_WRAPPER_NAME_EMPTY"), + twp -> twp.getWrapperDescription().isEmpty(), + () -> new RestelException("TEST_API_WRAPPER_DESC_EMPTY"), + twp -> twp.getWrapperParams().isEmpty(), + () -> new RestelException("TEST_API_WRAPPER_PARAM_EMPTY")); + + validateMap(validationMap, testApiWrappers); } private static void validate(TestSuites testSuites) { @@ -287,4 +289,17 @@ private static void validate(TestScenarios testScenarios) { throw new RestelException("EXEC_DEF_NAME_EMPTY", testScenarios.getScenarioUniqueName()); } } + + private static void validateMap( + Map, Supplier> validationMap, T t) { + if (t == null) { + throw new RestelException("EMPTY_OBJECT"); + } + validationMap.forEach( + (predicate, supplier) -> { + if (predicate.test(t)) { + throw supplier.get(); + } + }); + } } From 6c6a010bcbe699ce2b1dade9593b2151c55f3936 Mon Sep 17 00:00:00 2001 From: bharathyes Date: Wed, 11 May 2022 16:39:41 +0530 Subject: [PATCH 14/17] validation maps for api_def, suites, scenarios --- .../restel/utils/RestelUtils.java | 74 ++++++++++--------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/techconative/restel/utils/RestelUtils.java b/src/main/java/com/techconative/restel/utils/RestelUtils.java index 92b48fa..dcfdb35 100644 --- a/src/main/java/com/techconative/restel/utils/RestelUtils.java +++ b/src/main/java/com/techconative/restel/utils/RestelUtils.java @@ -236,28 +236,30 @@ public static BaseConfiguration createBaseConfig(BaseConfig config) { } private static void validate(TestApiDefinitions testApiDefinitions) { - if (StringUtils.isEmpty(testApiDefinitions.getApiUniqueName())) { - throw new RestelException("DEF_NAME_EMPTY"); - } - if (StringUtils.isEmpty(testApiDefinitions.getRequestUrl())) { - throw new RestelException("DEF_URL_EMPTY", testApiDefinitions.getApiUniqueName()); - } - if (StringUtils.isEmpty(testApiDefinitions.getRequestMethod())) { - throw new RestelException("DEF_METHOD_EMPTY", testApiDefinitions.getApiUniqueName()); - } - if (StringUtils.isEmpty(testApiDefinitions.getExpectedResponseMatcher())) { - throw new RestelException("DEF_RES_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()); - } - if (StringUtils.isEmpty(testApiDefinitions.getExpectedHeaderMatcher())) { - throw new RestelException("DEF_HEAD_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()); - } - if (CollectionUtils.isEmpty(testApiDefinitions.getAcceptedStatusCodes())) { - throw new RestelException("DEF_STATUS_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()); - } + Map, Supplier> validationMap = + Map.of( + tad -> tad.getApiUniqueName().isEmpty(), + () -> new RestelException("DEF_NAME_EMPTY"), + tad -> tad.getRequestUrl().isEmpty(), + () -> new RestelException("DEF_URL_EMPTY", testApiDefinitions.getApiUniqueName()), + tad -> tad.getRequestMethod().isEmpty(), + () -> new RestelException("DEF_METHOD_EMPTY", testApiDefinitions.getApiUniqueName()), + tad -> tad.getExpectedResponseMatcher().isEmpty(), + () -> + new RestelException("DEF_RES_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()), + tad -> tad.getExpectedHeaderMatcher().isEmpty(), + () -> + new RestelException( + "DEF_HEAD_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()), + tad -> tad.getAcceptedStatusCodes().isEmpty(), + () -> + new RestelException( + "DEF_STATUS_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName())); + + validateMap(validationMap, testApiDefinitions); } private static void validate(TestApiWrappers testApiWrappers) { - Map, Supplier> validationMap = Map.of( twp -> twp.getApiName().isEmpty(), () -> new RestelException("TEST_API_NAME_EMPTY"), @@ -272,26 +274,32 @@ private static void validate(TestApiWrappers testApiWrappers) { } private static void validate(TestSuites testSuites) { - if (StringUtils.isEmpty(testSuites.getSuiteUniqueName())) { - throw new RestelException("SUITE_NAME_EMPTY"); - } + Map, Supplier> validationMap = + Map.of( + ts -> ts.getSuiteUniqueName().isEmpty(), () -> new RestelException("SUITE_NAME_EMPTY")); + + validateMap(validationMap, testSuites); } private static void validate(TestScenarios testScenarios) { - if (StringUtils.isEmpty(testScenarios.getScenarioUniqueName())) { - throw new RestelException("EXEC_NAME_EMPTY"); - } - if (StringUtils.isEmpty(testScenarios.getTestSuite())) { - throw new RestelException("EXEC_SUITE_NAME_EMPTY", testScenarios.getScenarioUniqueName()); - } - if (CollectionUtils.isEmpty(testScenarios.getTestApis()) - || testScenarios.getTestApis().stream().anyMatch(String::isEmpty)) { - throw new RestelException("EXEC_DEF_NAME_EMPTY", testScenarios.getScenarioUniqueName()); - } + Map, Supplier> validationMap = + Map.of( + ts -> ts.getScenarioUniqueName().isEmpty(), + () -> new RestelException("EXEC_NAME_EMPTY"), + ts -> ts.getTestSuite().isEmpty(), + () -> + new RestelException("EXEC_SUITE_NAME_EMPTY", testScenarios.getScenarioUniqueName()), + ts -> + (CollectionUtils.isEmpty(ts.getTestApis()) + || ts.getTestApis().stream().anyMatch(String::isEmpty)), + () -> + new RestelException("EXEC_DEF_NAME_EMPTY", testScenarios.getScenarioUniqueName())); + + validateMap(validationMap, testScenarios); } private static void validateMap( - Map, Supplier> validationMap, T t) { + Map, Supplier> validationMap, T t) { if (t == null) { throw new RestelException("EMPTY_OBJECT"); } From ea33acbcf0bd1e8ea4c3a46d078a78bbb3535d43 Mon Sep 17 00:00:00 2001 From: bharathyes Date: Wed, 11 May 2022 16:40:00 +0530 Subject: [PATCH 15/17] xlsx wrapper column name changes --- quickstart/jsonbox_test.xlsx | Bin 41263 -> 41269 bytes src/test/resources/jsonbox_test.xlsx | Bin 46039 -> 44119 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/quickstart/jsonbox_test.xlsx b/quickstart/jsonbox_test.xlsx index b9afd2dddd30769595127aa643374d9b4dcf0a0b..6ab61d50f2b37c6bd55df5a5b4ad6f5da37a8ee3 100644 GIT binary patch delta 12034 zcmc(ldpy(a|M=-n(p_{ixpU}K_mUEID`yrRL_#RD$)qB}$e6=;-#Q6Jnl`7=L8-(r z5o4>w?sAwm=QRtlYUVu5PQSN4hwta}`+fiT{rB19vDfQ*UDx$`zF+U_{n+(*ygPiC9p}+y-*s#!M?~_p+v-OP&-Vw2XJ>Sr*fvh=fc>Y8*`}w8>qmtb3 z>$cl(IKSRs>3Ee)Kvi0Vrkyo9}4}k^te*sPngQC z5Ov9xFcSH@=wb(>quHi5(WpuctRpEE>ub}hbAD7w3GZp{{Q_v1vB~}V`p}j4C))fC zMjjnnLkJLl@bJ&hOJDOtWn{X}d)qtT^ayCi+b=%HHa2|u@bry~&-!FT4|iIdli}rR z;@qwVuLru-h+ei~nbHZZF+u;D^|OF-Jj3wiq2V}Bn(CL0 zdB_dUU8T=Ik(yUY?EwqzhilTAHaF@n+;U!<07Z;I&!A3F$c2l)to#v%h9q=1Q!Jp{ z9_mqdM3_aBWu-@pO>x}A3AHMsLZim+|&pSg>4P7_8E?k;0Pg~JC^9mjb3~Vd5IK1@*X5Aac zQC*(H2Tx+Kt)c&nM^xMXC!Px}Ske)`TzMrwOVAMMXSC^vJrt&c?LoDT%AWPisyEKu z`J@uVs3@JhsmW(r6-P4Sou95NL#NJ>JWmf~Cu`@dnvj-O9ABjWGkcWEX%U#P2(efqBbIBoxL{&P)P-#<}+rfTM);!Yz7j=$P^ z_1?sjXa;Y}oAJUs<)rMbr72Vgv--~Ej{?G`a>Dw-j(5A}YwFu}^8mR53aI=YJyoG1ym;|Ib@0CVmq|$P*0FU$tKWwGwiISh_IYOX+hTs@JFLId10Q^j zyz+46cKok{* zqPekoHA0`FW}A~`rUi|MkBZNQ(|C!z2+@$5&2tRx zPaf{8N&ww%_}~`TbLJ-pi*m&|yxz**fM7WC6YyvESjYZk)oW*!Tl{Lz!_5@3Ho3C< z3Dwnzt5vlpz|F^g-G6RCrCv(^{NR~urOVq^`#Q_zEs3&vbRH+ ztGW>3kPnc-AL)oI)R7jpxQ+=>c7?Lw-xfoy>WYYr)^@U%?F1bcxqp$@li=7o(jFjd z`VmoY>^M6z+dS9bFO>~5n#U%Cw2IJ42w9j_glu}2Xi|tu6pyAijaFahw9;z*bP_8S zMMKQVV`NTV`aOl8v0V`_z7Z=wCla@J4KaWbu~_t{mMY!PM1yDSrp5l$zBJPPR)I)N zdSxXKM5G0yx$-Xngq?R*A8x_}a^i7Ri-FH;>v9#+k>S|L3Ll+8`5-kjeq(lG-H+ z3PhP}l1+}jTkB?rI+2{Lg`xu(>H{>NUT)`S)H?S)v_7b&wuxEVZNfRsi45YjVj>|N z6}x;inpA2$zc9xB%XAPIO{I@2CN9b+>%QF-OfB1vgC>a6iBr@5qg+AHx>hwwamkr=cf z?U*w`xtxekn&t_I^_a|#TH<6#=e10Je)osdD5BQ4rkSaT$oi;(bW67}ML~Rl+_%tA z8b=dHCnVRLNVIe@Vj2_pnWX)G?OU+S9L1tGyZd%9@Xv0`8!uMI_mlkFzUOp?Ou3KnM=#rbvRfV{r<-9_OJ*xj>jvM*nsMh&{w z$m-^$RiD0d`0OD!lPF+X%C31^nrDLTzD+#{kYl>C`?-0&)R1@FJaSC;d+I@SOm{K$ zAPUu;%{eFzZ#Sp57-BEexTifQdvLX-Pq}5{B=7dd=p<_C*r1i7;_=f#B%kir-NiY$ z&?DxS=ka>P;%Y6l*@cE(+?(&YiE+`6F60m#L@`B*J17+H*)l1-Zi4OVO0XX42Fmk5 zCHg5#^Yi$r zFlb|3gQV4&K?sJ%fd^LAl&cmO+~K|EeE@6TIzs zooCA}ufy^isJ1htJ6Q^Svtxsil@r`*)WnNAESolPItn;HzT8Z@uOE6_)sfbrVb*dj z53R2wp7?RPqIt=cd@_MI2(V^=oae%0i{S2vvp2W;9bk`w*sbN0=qY8zB!w&|S; zv@=b3pDXSh-w-_JNpXCco7t}SDbUV5;eEdN%lL-KF}$f+kiBD2a<@-sKj7n!gg)>>5)p! zC40uD@MkKdXMl=Xh`nP-@_j^SF2cVAf_Vmkzfd8)P^k&AXM`lbLUh(4{K*hZ z1qA+5h4fOz?6SS%<>YQeXFtNf7J_*VftRb0%2jGE+cPdFix8b+gg+gEc>{r0sE{gD z%tGxQLz6X;o!Ur$1_bjL1YV^=s#2*5wP%DTA4GOqA_0FU1k(wDSF4b!Rm{Td9mA4O zBRhSN{=E=P9|T^bLaI@z3A1N}B}XGWCcB? zzCqyiDx`Xqns9qYc=9V`XC2ai5`vk6z#CLZ4Ju}6dq;F~H?p%I>AwKMEJENk6%tM5 zXbsw)fld}7JH<$U1q7p{1%IPLdZS_%Vec4`tm)gS?dz|qg;}iyf2Trvr&1GP&xlAq z=-X-O>#w1OS+50uuR?mSf}hy#j$glH`{8EC!lp6UEn${Hr8qMnVcaKF-qdH2EMrvK z&e)hKl0!3Xvf6>)IXjpaX7xYL|K-^)WmMVD_?ju+fTS$Y^ zb0xC)xW$;fON=aiEpsjoUPe?PNa14)GNdHGd8yWT-fnMC{^;8#ji-JcW0P92w%$o1 z`#mH5ad34%#qdEdksmi5PqCuL9^CtpS=wH`rgyUDj&TnM3k9z0y)%0H+eoN{+2&Z< z9k}4=9p!olu;Eze7wzqV87p4p5E2m&o;M3i_a3!CgoEkK`MB5Oi0Mzw96@){AUY+s zmX;%n5Q*nXG}75vwvTJ?g~kHcE3~s8Oy)EBB`NF&LF|oEoDFPo6y~O(m_AqM^Vz6v zC_ZV9(+z_II{I`3sleqImlKKgR*jSwWF~>F@_9a{v4E~?2`BBXB^rdfO+9UWrI(mzkg7)JThQ>?c zUdcxTP>oX9a?-qRVf@Okx=Kpa11tXV*1qcRZ}`iv>l8z?ffXy;qR0I3s+J@`wt`qN zX<}LQ`fCI39-mMD8V`IBbp=_%kT8Yjf@IHxK{-4rncOuikLN!ZkeDqd5uO4KtVmu0 zF^;zrpaI`TiTzagu_B(WVkVuFPfxrena^M3-r&jF79+~^leXAey`wVZ@7+pjds_^! zV(@A)iu3Y6HjU26aAJUsHWrgngqdbO&0!;pq61sn>WNocgI%DlpKC(rdgr3F!X;OUiRZsnKOqIZPn7agZpQ zE{dOfHSIR3Pk~9F^M>N)BI6?X96G=^F@*#3*1W>krJ1w`is|PJo29FA(WcBe9G|lZ zEC19hMHkg~JvO;c9@s=~emt2Dgv9PGtX~?L%pUV2$tP)6C9==tw#;7X^qb7^?=ZXR z9AN%ijBF{DVUu*RFh0+bhoB2_7Y80s=98^Zx$}$EuT8VK*o%Yrm&O^B_cB|r^`84Z zWwdm9VhgNrF0#{c=&fbYT*2(LrM~LPs18kAemt&&Vc%L1<;bklFPe?)G~>V5xP_W4 z;4e?njp~rlyHzxn=1sCRT+<$9wl)EjV+u3zX+sOa$g)Z4DY6mJ73L+_Ycq<-fi$+A z@zQG>o3Il_HAB^z>2}5%ZX9-r&_eigHd{XDC0kL_jClC$b>nWBEu8))xYB3W?(kP1 z-IzTl5eOr#v@}ln40}ZMYXL-Z6$LVH^1BWAUx4YStcY!aLX+ zt&$7W<+JMe)3)2yllLC}6oE8jBh4x=?#ja#+nTMCCmfYuJBoj6tH1jGVATz9!WF!# zo#pOvI?WB;KTLnahrPujYgovdii^7t;jL%lTOlC2HLTwi-QPlZc!`P+u{*3uD>7=l zm_KPalK=5DK{!VU3)N1m!E3;@@f^Fuz@l+5?c@O6&B`_qO~p~Gn*Wa z<7Nvz918s%#>Yk<-Zdz`Yw&D6`o`DFy9U*F4PLLGyz%wzU4!>`4gOk>zWMdjU4yQ> z27T)%Z+;!RYw-21!MFA3l&{lw4d(6|EUuqS`Kp{{urkYF^#=5kf##T>QQ=%OPwT zxdW=6u{muAh}1ER#1y;hg2)LFx#PynYCMqk%F$Uz->}OOWWqd#m7E?P0-5XXZFD@o zMsp*`yqj%t#A8<$$V>;ryytLdnfW_Z{odxZ-$CZ@hLPFD?og0v?3CK{`;9-;z%ZSh zbqoxSFi3ATu0fLT_AIW}a}?F){2q0Wwh@!+$zG^j{7WztPcUjpinhnUigC!DCl0$ZQ3} z#5=SvBX>g8^ERjL1d#^}BfE;-4=%4Jh}?OjY8iRbSqCsT>^ccD(cp4AJ&ah66J)xs zxxdUT$hN?E>>`0o0T?FULAcB`fT|a6PBQ?RHinUN#qPGt%Ly_KZpmi8z^~wAF*$%+E8z6HRRQ=KBv|S+ch+*XB zC+x10yj$2S)Nwyz;psAVs~EkES)& z*Gt-GseDw@^wRuNH&@?}cb3->Kl`E9n~CzJFU{s_s7hyrqI4e0b@qsOq&sB?kPww1 zLz|N)3h7c&cPX`$qo29-0Ywgba?ngp}bRa*-u?A z6S(=ofW&ACLjX|g8?F!~QI^A_-lKjxi(^X@MQHixQZu)fI3=%zH5?)Gc(7*uaGsy6 zxg8X6LSs1#Jhj)jZNOMbsipCsS>XR9fq3VOnt+w?#m9Tu_p?S~ z0}CuRSx;Y>@ZV5X;j&R@{k;IiQt+QvxvUfXck$>W{@BMM*yveyD)U7OUBYh`e`pm= z#8Vn^7!xk65nDyW)!TA>lN8?uc{H)qd}Q#0C@DIw#){`xuFsW3CMHf|GZn(2QsG33 zfG-fqFKB<6S^5Mt@+Govw7$*jq$ONpWj&4Fh(H-T7KUN9N@X)K3$km1Qf_>7jI^^^ zd<_@>n}+e3{MH2X9nzQu^6kpR`OsO6tbhJ{db(&-9(b3#gnNY=peNDl>XS?dU`+Xw z>5iCE@75=@@BBsxjA}U()8GZ$G8r(7scjszP{RHk=N zq-c55eOA#B#uL!6N5@;1)?kCAtKolct2=w z#)t%61Nf{#tHWZYQ*Q+tu%y@;AHq}w$1O$>lsO@@lg;Z#^)y*BJmoYWdVSKQ=mQ{{ z6_zrI>Zk&8Id5&Okvy{2QgS7#&hLeUo8H?@4@cSd7Xp<=%`>5mz!#vmHLuZd+>8f9 z#Y?ZqLKQK8$$n7Dy?jB5MAXlGD*n+d$K{R+^i61-Lb~oys4P@8j03)%%SBTYJb}7u z>9@hrb4QuP{k7gHmW3~wOhCgse)8-0q0b8V&RbxsL^wYzC@G!2NMe2eo-nDvNf(7b z&K;%u%3dc%`VxB`HFz4luv(aob4sL}#=`el?G#NKLYId1!$wYCc;$sE=S9y>$l4v< z$`z9$+c<2i`Y&|FQhTFVy4Y!im57{;N~eTlp$gphJzTd>LBQ?7!E*K$Bn_?)NwjS6 z0ubRX`3q!Xd;+BnRgNlW5-FL&1{AV|URSRQ%a>0#U34O6()AzR!~9!CmwD4y44~J`?raCLH$1`H-UF-)8d-M|OC2(N)%i zvivx-UQMkh*QR+vBXgl_XSgdcdx1A6wm+}$%f0d`<-0mBtC!(QWcrzO6EitYswNui zXm%q!n9Yu)q!xU>=~6<_Tv5?z9+G&0Imp#5FM6Qa){DWu zNxFJw-}zatwnR{SZ~sLriqyNnKs(BeN1}i;Tn2Dh*7A(Yvs@nuh^TIl83=UYgqDQ0 z{NGKye~2zVCR}r5RWGPGaJ*yXM*mf}DbaQn@~?A)kOa0w$i&R|wTDg7ySC@qu-pFR01ZA(Dw+c`xx4D$%%g{)fU0BM+9UMF!u<3#ZcWR&@;hKLBXkK z5v+5FfLsD5kI?rNs#^l>2?m__!KsM|Rx%>sAp!G<(Dw|g`y6^E#3?8wm4skDLXt#zTy_e&oXSP8h7bXD1WY}luN8o@@1VL((4GhXVlB zO$?;B^KReS)W^#ZX2|-a>-s19vf6p~gc-K|(vzTZznw=AW+e7Y?|?>bJ1_4JemV?^ zp9=H+w=b09apk}Y{DY`pDSt%cmGSGNU*b2$&QPYXUte&t(VVttI^VGRciG>g_{61FN)5F>2dd@3=SIcsUO+G?y-mj*3e8iVRUw6 zO+i6ep)Haiy`m5YVrAhkYDdW(9rCFeZq)qZ(ERv#`iN5NrkO#(=xF;b^U+!|uP8K5 z5<-;>E&AHZf#pokUT6ww+^VEhyZ2|Nr}nQCJ(OL^)D=Ka(AGwpwOi{&aqCh9i3o;IDO>6v(Ua%cC7D=GuK{)B$!p}o#78>v zN9>7F)szIG`QgurGGSPZIbZc!Vg#nuUY}qs4QRA2ua}Mst3=&w$4q^i)!N0etpH7O zENODh9D$D4_Q~c^W9GEzfUQf{B~owAtodk)qN+$sCnIb3w1{~yi&cRbL%=G6IoZr`yxVKL{o9<1rV6V}!D z&(52``8VOAk6X;Bm3MyQjJKGDgi^M0o>g+gLrYp>sFkGOIKq~gkWhTy&2?ITH>CMK zG3Tuh)^P3!yZXY-YdrC^o4;@9>N{s1^M&{4tF6}0Dx1Q`AK+(i8Un>FuGGp+Pm;NP z9|qoJj7J{LY3}$b)rHG#*Pk-ur|kGC)hB-T|CAX&Wd|rbPsd|ne`}nZsG46|yHKC$ zQ$a2I8){+yuQ3az;{vlei3{J}z^LEXh%!O0-wR=u`XwEUf9x#Cgd0M9{9j z#I~zk*;-XTIx(Tg5=fpUt77b^`!5#Do zm~902TTs$1=z#zy#{jkaa8@qd!GM6-MQ~4plG32n0ZxnnwO4Rf9o)f$fZ0cIzYQhb zh8{TYYjDR^raK8&B-Gv^w;N*Bg zP1A>^?c?A`z#J#I--D9wL8~t~F)pYb^kG^0IJglo?gaO2C@C9y;G&b`MYYpDEFT{S zZvqBRa3?@X1Zed|C&op!XdhObj{}N;@h7e9`>^_b9IymTEWy1HN-Bg_2RSi< z)I>fkv5x~l!2C&Ye*h&tfF8KyPt?HOKJxZ{wzy` zLnZ-pm*8FuB^5&t1UoqftDQ!$d=L&q0w#yx{uD}j3at)yVg##2BUo_=hav*z0m1zl zl=KXGAjHWrMD0F;m5XpFAz+>n++RRRFQC;SPK*$>R|r-e!U1oee#LgIg!tWW@9d^F zsbfy!uy&yQa9agce!gwdGEjc4ZP6)E{z9_uESEF{a(XPMDq_999=fs{!Z?9_QqL{=Bh3If} z`5Bn4W#i{bG%a>3S34*CmD#}&L!KT>v zQk$rGtmEHLWe{c`Hx=zgh1NJd0 za)}UT&X=@~I5KL{CW|xjigYxV(ao$Slj(F{6hPG(y|NWd-|WlPgJwQ_@BXob>;K+< zWliDPvW}!hwnz*!0n<0?rYIWntn^9~sf=7s`%H_i9QU{E?&Szjq;7J!nVaj#J`RU1 zZY6|LgzaMyajc=K3D?$MhH1s;zk#WqA$<^N?B~j>x~T2E!XkyF6csKk$*kq`0m}*h zx}$>$jSUT)5$+h4%tL_*Ts)Y-#qNR0ekO3}1u4)0CUD_MT6`Pg*c_tfgM>1bs z1~2tmK8cM_BpqBn$yiOYR9o)*c{mb3PqN*%Y;D)OKK&Xz6uD1XNomJF4@dsg)V27o zwNQL);adIWiR$y$QpLY0DGg~Vf!F!>&wKpi!X3+3_^VK7g<=DK%SN4LujQWgMLNm{ z@q3H5EgNp2(Si>x(qA_2fQBaiMbY+UqXRUActO$jpCSGGAJJR>{X$CRTkwhpn)?qf zA07YCJ1+J5_rm3WdMOSrd*N?A*zj{rmh)cx!v~NR`WJupcRbke^9KKYIsX%|9WQ^d LXO$UgIhOwe0u}M- delta 12239 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 O;2n>*t~Mkn^ZP%+^Wymc diff --git a/src/test/resources/jsonbox_test.xlsx b/src/test/resources/jsonbox_test.xlsx index b9d18b0d1cd746d4eebebab96f1708cea215ab72..435d5aaed4f5bf523fce861df95221903a78bc5a 100644 GIT binary patch literal 44119 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 ax+Chfk}N8aL6DH}fZtglK}_U<@BR;yW Date: Wed, 11 May 2022 22:06:03 +0530 Subject: [PATCH 16/17] revert to if-else and context signature convention --- .../managers/RestelDefinitionManager.java | 8 +- .../restel/utils/RestelUtils.java | 109 +++++++----------- 2 files changed, 47 insertions(+), 70 deletions(-) diff --git a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java index ba53552..a2546c6 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java @@ -106,7 +106,7 @@ private boolean executeTestMethod( doMatching( headerMatchers, response.getHeaders(), - getExpectedHeaders(restelTestMethod, apiContext)); + getExpectedHeaders(apiContext, restelTestMethod)); log.info("Headers matched for the response of " + scenarioName + ":" + isHeaderMatched); if (!isHeaderMatched) { @@ -182,12 +182,12 @@ private RESTRequest createRequest(RestelApiDefinition restelTestMethod) { /** * Gets the expected headers for the given test name. * - * @param restelTestMethod - * @param apiContext + * @param apiContext The context in which the variables in headers have to be resolved. + * @param restelTestMethod The test whose header has to be returned. * @return The expected response object. */ private Map getExpectedHeaders( - RestelApiDefinition restelTestMethod, TestContext apiContext) { + TestContext apiContext, RestelApiDefinition restelTestMethod) { if (CollectionUtils.isEmpty(restelTestMethod.getExpectedHeader())) { return null; } diff --git a/src/main/java/com/techconative/restel/utils/RestelUtils.java b/src/main/java/com/techconative/restel/utils/RestelUtils.java index dcfdb35..68385d3 100644 --- a/src/main/java/com/techconative/restel/utils/RestelUtils.java +++ b/src/main/java/com/techconative/restel/utils/RestelUtils.java @@ -15,8 +15,6 @@ import com.techconative.restel.core.utils.ContextUtils; import com.techconative.restel.exception.RestelException; import java.util.*; -import java.util.function.Predicate; -import java.util.function.Supplier; import java.util.stream.Collectors; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -236,78 +234,57 @@ public static BaseConfiguration createBaseConfig(BaseConfig config) { } private static void validate(TestApiDefinitions testApiDefinitions) { - Map, Supplier> validationMap = - Map.of( - tad -> tad.getApiUniqueName().isEmpty(), - () -> new RestelException("DEF_NAME_EMPTY"), - tad -> tad.getRequestUrl().isEmpty(), - () -> new RestelException("DEF_URL_EMPTY", testApiDefinitions.getApiUniqueName()), - tad -> tad.getRequestMethod().isEmpty(), - () -> new RestelException("DEF_METHOD_EMPTY", testApiDefinitions.getApiUniqueName()), - tad -> tad.getExpectedResponseMatcher().isEmpty(), - () -> - new RestelException("DEF_RES_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()), - tad -> tad.getExpectedHeaderMatcher().isEmpty(), - () -> - new RestelException( - "DEF_HEAD_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()), - tad -> tad.getAcceptedStatusCodes().isEmpty(), - () -> - new RestelException( - "DEF_STATUS_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName())); - - validateMap(validationMap, testApiDefinitions); + if (StringUtils.isEmpty(testApiDefinitions.getApiUniqueName())) { + throw new RestelException("DEF_NAME_EMPTY"); + } + if (StringUtils.isEmpty(testApiDefinitions.getRequestUrl())) { + throw new RestelException("DEF_URL_EMPTY", testApiDefinitions.getApiUniqueName()); + } + if (StringUtils.isEmpty(testApiDefinitions.getRequestMethod())) { + throw new RestelException("DEF_METHOD_EMPTY", testApiDefinitions.getApiUniqueName()); + } + if (StringUtils.isEmpty(testApiDefinitions.getExpectedResponseMatcher())) { + throw new RestelException("DEF_RES_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()); + } + if (StringUtils.isEmpty(testApiDefinitions.getExpectedHeaderMatcher())) { + throw new RestelException("DEF_HEAD_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()); + } + if (CollectionUtils.isEmpty(testApiDefinitions.getAcceptedStatusCodes())) { + throw new RestelException("DEF_STATUS_MATCHER_EMPTY", testApiDefinitions.getApiUniqueName()); + } } private static void validate(TestApiWrappers testApiWrappers) { - Map, Supplier> validationMap = - Map.of( - twp -> twp.getApiName().isEmpty(), () -> new RestelException("TEST_API_NAME_EMPTY"), - twp -> twp.getWrapperName().isEmpty(), - () -> new RestelException("TEST_API_WRAPPER_NAME_EMPTY"), - twp -> twp.getWrapperDescription().isEmpty(), - () -> new RestelException("TEST_API_WRAPPER_DESC_EMPTY"), - twp -> twp.getWrapperParams().isEmpty(), - () -> new RestelException("TEST_API_WRAPPER_PARAM_EMPTY")); - - validateMap(validationMap, testApiWrappers); + if (StringUtils.isEmpty(testApiWrappers.getApiName())) { + throw new RestelException("TEST_API_NAME_EMPTY"); + } + if (StringUtils.isEmpty(testApiWrappers.getWrapperName())) { + throw new RestelException("TEST_API_WRAPPER_NAME_EMPTY"); + } + if (StringUtils.isEmpty(testApiWrappers.getWrapperDescription())) { + throw new RestelException("TEST_API_WRAPPER_DESC_EMPTY"); + } + if (StringUtils.isEmpty(testApiWrappers.getWrapperParams())) { + throw new RestelException("TEST_API_WRAPPER_PARAM_EMPTY"); + } } private static void validate(TestSuites testSuites) { - Map, Supplier> validationMap = - Map.of( - ts -> ts.getSuiteUniqueName().isEmpty(), () -> new RestelException("SUITE_NAME_EMPTY")); - - validateMap(validationMap, testSuites); + if (StringUtils.isEmpty(testSuites.getSuiteUniqueName())) { + throw new RestelException("SUITE_NAME_EMPTY"); + } } private static void validate(TestScenarios testScenarios) { - Map, Supplier> validationMap = - Map.of( - ts -> ts.getScenarioUniqueName().isEmpty(), - () -> new RestelException("EXEC_NAME_EMPTY"), - ts -> ts.getTestSuite().isEmpty(), - () -> - new RestelException("EXEC_SUITE_NAME_EMPTY", testScenarios.getScenarioUniqueName()), - ts -> - (CollectionUtils.isEmpty(ts.getTestApis()) - || ts.getTestApis().stream().anyMatch(String::isEmpty)), - () -> - new RestelException("EXEC_DEF_NAME_EMPTY", testScenarios.getScenarioUniqueName())); - - validateMap(validationMap, testScenarios); - } - - private static void validateMap( - Map, Supplier> validationMap, T t) { - if (t == null) { - throw new RestelException("EMPTY_OBJECT"); - } - validationMap.forEach( - (predicate, supplier) -> { - if (predicate.test(t)) { - throw supplier.get(); - } - }); + if (StringUtils.isEmpty(testScenarios.getScenarioUniqueName())) { + throw new RestelException("EXEC_NAME_EMPTY"); + } + if (StringUtils.isEmpty(testScenarios.getTestSuite())) { + throw new RestelException("EXEC_SUITE_NAME_EMPTY", testScenarios.getScenarioUniqueName()); + } + if (CollectionUtils.isEmpty(testScenarios.getTestApis()) + || testScenarios.getTestApis().stream().anyMatch(String::isEmpty)) { + throw new RestelException("EXEC_DEF_NAME_EMPTY", testScenarios.getScenarioUniqueName()); + } } } From a06e648314b422edc0dbbc9036eb11e2200f1213 Mon Sep 17 00:00:00 2001 From: bharathyes Date: Wed, 11 May 2022 22:08:03 +0530 Subject: [PATCH 17/17] linting correction --- .../restel/core/managers/RestelDefinitionManager.java | 2 +- src/main/java/com/techconative/restel/utils/RestelUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java index a2546c6..0125183 100644 --- a/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java +++ b/src/main/java/com/techconative/restel/core/managers/RestelDefinitionManager.java @@ -187,7 +187,7 @@ private RESTRequest createRequest(RestelApiDefinition restelTestMethod) { * @return The expected response object. */ private Map getExpectedHeaders( - TestContext apiContext, RestelApiDefinition restelTestMethod) { + TestContext apiContext, RestelApiDefinition restelTestMethod) { if (CollectionUtils.isEmpty(restelTestMethod.getExpectedHeader())) { return null; } diff --git a/src/main/java/com/techconative/restel/utils/RestelUtils.java b/src/main/java/com/techconative/restel/utils/RestelUtils.java index 68385d3..97594df 100644 --- a/src/main/java/com/techconative/restel/utils/RestelUtils.java +++ b/src/main/java/com/techconative/restel/utils/RestelUtils.java @@ -283,7 +283,7 @@ private static void validate(TestScenarios testScenarios) { throw new RestelException("EXEC_SUITE_NAME_EMPTY", testScenarios.getScenarioUniqueName()); } if (CollectionUtils.isEmpty(testScenarios.getTestApis()) - || testScenarios.getTestApis().stream().anyMatch(String::isEmpty)) { + || testScenarios.getTestApis().stream().anyMatch(String::isEmpty)) { throw new RestelException("EXEC_DEF_NAME_EMPTY", testScenarios.getScenarioUniqueName()); } }