diff --git a/pom.xml b/pom.xml index 31e788b..0a95bbb 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 ru.sbtqa.tag page-factory @@ -43,7 +44,8 @@ UTF-8 1.8 1.8 - 2.4.0 + 2.4.0 + 4.0.1 @@ -62,30 +64,6 @@ 1.3.1 jar - - ru.sbtqa.tag - datajack - 1.4.0 - jar - - - ru.sbtqa.tag.datajack.adaptors - datajack-json-adaptor - 1.2.0 - jar - - - ru.sbtqa.tag.datajack.adaptors - datajack-properties-adaptor - 1.1.0 - jar - - - ru.sbtqa.tag.datajack.adaptors - datajack-excel-adaptor - 1.1.0 - jar - ru.sbtqa.tag allure-helper @@ -95,17 +73,17 @@ ru.sbtqa.tag video-recorder 1.0.6 - jar + jar io.cucumber cucumber-java - ${version.cucumber} + ${cucumber.version} io.cucumber cucumber-junit - ${version.cucumber} + ${cucumber.version} ru.sbtqa.htmlelements @@ -194,6 +172,31 @@ webdrivermanager 2.2.2 + + ru.sbtqa.tag.datajack + datajack-api + ${datajack.version} + + + ru.sbtqa.tag.datajack.providers + json-provider + ${datajack.version} + + + ru.sbtqa.tag.datajack.providers + properties-provider + ${datajack.version} + + + ru.sbtqa.tag.datajack.providers + excel-provider + ${datajack.version} + + + ru.sbtqa.tag.datajack.providers + mongo-provider + ${datajack.version} + diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/support/data/DataFactory.java b/src/main/java/ru/sbtqa/tag/pagefactory/support/data/DataFactory.java index 3af3bee..6cac37a 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/support/data/DataFactory.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/support/data/DataFactory.java @@ -1,52 +1,61 @@ package ru.sbtqa.tag.pagefactory.support.data; -import ru.sbtqa.tag.datajack.TestDataObject; -import ru.sbtqa.tag.datajack.adaptors.ExcelDataObjectAdaptor; -import ru.sbtqa.tag.datajack.adaptors.json.JsonDataObjectAdaptor; -import ru.sbtqa.tag.datajack.adaptors.properties.PropertiesDataObjectAdaptor; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; +import ru.sbtqa.tag.datajack.TestDataProvider; import ru.sbtqa.tag.datajack.exceptions.DataException; +import ru.sbtqa.tag.datajack.providers.ExcelDataProvider; +import ru.sbtqa.tag.datajack.providers.MongoDataProvider; +import ru.sbtqa.tag.datajack.providers.json.JsonDataProvider; +import ru.sbtqa.tag.datajack.providers.properties.PropertiesDataProvider; import ru.sbtqa.tag.qautils.properties.Props; public class DataFactory { - private static TestDataObject dataContainer; + private static TestDataProvider testDataProvider; private static String configCollection; - public static TestDataObject getInstance() throws DataException { - if (dataContainer == null) { + public static TestDataProvider getDataProvider() throws DataException { + if (testDataProvider == null) { configCollection = Props.get("data.initial.collection", null); String dataType = Props.get("data.type", "stash"); switch (dataType) { case "json": - dataContainer = new JsonDataObjectAdaptor( + testDataProvider = new JsonDataProvider( Props.get("data.folder"), Props.get("data.initial.collection"), Props.get("data.extension", "json") ); break; case "properties": - dataContainer = new PropertiesDataObjectAdaptor( + testDataProvider = new PropertiesDataProvider( Props.get("data.folder"), Props.get("data.initial.collection"), Props.get("data.extension", "properties") ); break; case "excel": - dataContainer = new ExcelDataObjectAdaptor( + testDataProvider = new ExcelDataProvider( Props.get("data.folder"), Props.get("data.initial.collection") ); break; + case "mongo": + testDataProvider = new MongoDataProvider( + new MongoClient(new MongoClientURI(Props.get("data.uri"))).getDB("data.db"), + Props.get("data.initial.collection") + ); + break; default: throw new DataException(String.format("Data adaptor %s isn't supported", dataType)); } } - return dataContainer; + return testDataProvider; } - public static void updateCollection(TestDataObject newObject) { - dataContainer = newObject; + public static void updateCollection(TestDataProvider newObject) { + testDataProvider = newObject; } public static String getConfigCollection() { diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/support/data/DataParser.java b/src/main/java/ru/sbtqa/tag/pagefactory/support/data/DataParser.java index 2cf9a0c..4e24ff6 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/support/data/DataParser.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/support/data/DataParser.java @@ -19,16 +19,13 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang3.reflect.FieldUtils; -import ru.sbtqa.tag.datajack.TestDataObject; import ru.sbtqa.tag.datajack.exceptions.DataException; +import static ru.sbtqa.tag.datajack.providers.AbstractDataProvider.PATH_PARSE_REGEX; public class DataParser { - private static final String STEP_PARSE_REGEX = "(:?\\$([\\w|-|\\s|_\\d]+)?(\\{[^\\}|^\\$|^\\{]+\\}))+"; - private static final String TAG_PARSE_REGEX = "(?:\\$([^\\{]+)(\\{([^\\}]+)\\})?)"; - - private String featureDataTag; - private String currentScenarioTag; + private String featureDataTagValue; + private String currentScenarioDataTagValue; public void replaceDataPlaceholders(List cucumberFeatures) throws DataException, IllegalAccessException { @@ -83,63 +80,36 @@ private Node replaceArgumentPlaceholders(Node argument) throws DataException { } private String replaceDataPlaceholders(String raw) throws DataException { - Pattern stepDataPattern = Pattern.compile(STEP_PARSE_REGEX); + Pattern stepDataPattern = Pattern.compile(PATH_PARSE_REGEX); Matcher stepDataMatcher = stepDataPattern.matcher(raw); StringBuffer replacedStep = new StringBuffer(raw); - // Offet to handle diff between placeholder length and value length - int offset = 0; while (stepDataMatcher.find()) { - String collection = stepDataMatcher.group(2); - String value = stepDataMatcher.group(3); - - if (value == null) { - continue; - } - if (collection != null) { - DataFactory.updateCollection(DataFactory.getInstance().fromCollection(collection.replace("$", ""))); + String collection = stepDataMatcher.group(1); + String value = stepDataMatcher.group(2); - replacedStep = replacedStep.replace(stepDataMatcher.start(2) + offset, stepDataMatcher.end(2) + offset, ""); - offset -= collection.length(); - } else { - String tag = currentScenarioTag != null ? currentScenarioTag : featureDataTag; - - if (tag != null) { - parseTestDataObject(tag); - } + if (collection == null) { + parseDataTagValue(currentScenarioDataTagValue != null ? currentScenarioDataTagValue : featureDataTagValue); } - String dataPath = normalizeValue(value); - String parsedValue = DataFactory.getInstance().get(dataPath).getValue(); - replacedStep = replacedStep.replace(stepDataMatcher.start(3) - 1 + offset, stepDataMatcher.end(3) + offset, parsedValue); - offset += parsedValue.length() - 1 - value.length(); + String builtPath = collection == null ? "$" + value : "$" + collection + value; + String parsedValue = DataFactory.getDataProvider().getByPath(builtPath).getValue(); + replacedStep = replacedStep.replace(stepDataMatcher.start(), stepDataMatcher.end(), parsedValue); + stepDataMatcher = stepDataPattern.matcher(replacedStep); } return replacedStep.toString(); } - private void parseTestDataObject(String tag) throws DataException { - Pattern tagPattern = Pattern.compile(TAG_PARSE_REGEX); - Matcher tagMatcher = tagPattern.matcher(tag.trim()); - - if (tagMatcher.matches()) { - String collection = tagMatcher.group(1); - String value = tagMatcher.group(2); - TestDataObject tdo = DataFactory.getInstance().fromCollection(collection); - - if (value != null) { - tdo = tdo.get(normalizeValue(value)); - } - - DataFactory.updateCollection(tdo); - } + private void parseDataTagValue(String tag) throws DataException { + DataFactory.updateCollection(DataFactory.getDataProvider().getByPath(tag)); } private void setFeatureDataTag(String featureDataTag) { - this.featureDataTag = featureDataTag; + this.featureDataTagValue = featureDataTag; } - private void setCurrentScenarioTag(String currentScenarioTag) { - this.currentScenarioTag = currentScenarioTag; + private void setCurrentScenarioTag(String currentScenarioDataTag) { + this.currentScenarioDataTagValue = currentScenarioDataTag; } private Node replaceDataTablePlaceholders(DataTable dataTable) throws DataException { @@ -176,8 +146,4 @@ private List replaceTableRows(List tableRows) throws DataExc } return resultTableRows; } - - private String normalizeValue(String value) { - return value.replace("$", "").replace("{", "").replace("}", ""); - } }