diff --git a/iterating_through_columns_in_tdps/pom.xml b/iterating_through_columns_in_tdps/pom.xml
index 84c4cfcf..a5cdd102 100644
--- a/iterating_through_columns_in_tdps/pom.xml
+++ b/iterating_through_columns_in_tdps/pom.xml
@@ -6,7 +6,7 @@
4.0.0
com.testsigma.addons
iterating_through_columns_in_tdps
- 1.0.0
+ 1.0.6
jar
@@ -71,7 +71,16 @@
httpclient
4.5.14
-
+
+ org.apache.commons
+ commons-lang3
+ 3.17.0
+
+
+ com.squareup.okhttp3
+ okhttp
+ 5.0.0-alpha.12
+
iterating_through_columns_in_tdps
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/AddColumnToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/AddColumnToTDP.java
new file mode 100644
index 00000000..4bde6501
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/AddColumnToTDP.java
@@ -0,0 +1,50 @@
+package com.testsigma.addons.android;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.AndroidAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+@Action(actionText = "add new column column-name with default value default-value to TDP tdp-id" +
+ " using the apikey api-key",
+ description = "Adds a new parameter/column to an existing TDP with the specified default value for all rows.",
+ applicationType = ApplicationType.ANDROID,
+ useCustomScreenshot = false)
+public class AddColumnToTDP extends AndroidAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "column-name")
+ private com.testsigma.sdk.TestData columnName;
+ @TestData(reference = "default-value")
+ private com.testsigma.sdk.TestData defaultValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddColumnToTDP execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String colName = columnName.getValue().toString().trim();
+ String defValue = defaultValue.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ logger.info("TDP ID: " + tdpIdStr + ", Column: " + colName + ", Default Value: " + defValue);
+ if (colName.isEmpty()) {
+ setErrorMessage("Column name cannot be empty");
+ return Result.FAILED;
+ }
+ try {
+ TDPApiUtil.addTDPColumn(tdpIdStr, colName, defValue, apiKeyStr, logger);
+ logger.info("New column added to TDP successfully");
+ setSuccessMessage("Successfully added new column " + colName + " with default value " + defValue + " to all rows in TDP");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ logger.info("Error occurred while adding column to TDP: " + e.getMessage());
+ setErrorMessage("Failed to add column to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/AddNewRowToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/AddNewRowToTDP.java
new file mode 100644
index 00000000..d89ee390
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/AddNewRowToTDP.java
@@ -0,0 +1,39 @@
+package com.testsigma.addons.android;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.AndroidAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+@Action(actionText = "add new row row-name to TDP tdp-id using the apikey api-key",
+ description = "Adds a new row/set to an existing TDP with empty values for all existing parameters.",
+ applicationType = ApplicationType.ANDROID,
+ useCustomScreenshot = false)
+public class AddNewRowToTDP extends AndroidAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "row-name")
+ private com.testsigma.sdk.TestData rowName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddNewRowToTDP execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String rowNameStr = rowName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ TDPApiUtil.addTDPRowWithEmptyData(tdpIdStr, rowNameStr, apiKeyStr, logger);
+ setSuccessMessage("Successfully added new row " + rowNameStr + " to TDP with empty parameter values");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add new row to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetEntireRowFromTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetEntireRowFromTDP.java
new file mode 100644
index 00000000..89f8d1ca
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetEntireRowFromTDP.java
@@ -0,0 +1,56 @@
+package com.testsigma.addons.android;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.AndroidAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+
+@Action(actionText = "get entire row from TDP tdp-id for the set name set-name using the apikey api-key and" +
+ " store data in the run time variable runtime-variable",
+ description = "Get entire row from TDP",
+ applicationType = ApplicationType.ANDROID,
+ useCustomScreenshot = false)
+public class GetEntireRowFromTDP extends AndroidAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ String resultVariable = "";
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ String key = entry.getKey();
+ if (key.equals("S.No.") || key.equals("ETF") || key.equals("Set Name")) continue;
+ resultVariable += entry.getValue() + ", ";
+ }
+ resultVariable = resultVariable.substring(0, resultVariable.length() - 2);
+ runTimeData.setValue(resultVariable);
+ runTimeData.setKey(testData4.getValue().toString());
+ logger.info("Successfully retrieved and stored data for iteration: " + setName);
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ logger.warn("Error occurred while processing TDP data: " + e.getMessage());
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetTDPColumncount.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetTDPColumncount.java
new file mode 100644
index 00000000..3015e3be
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetTDPColumncount.java
@@ -0,0 +1,49 @@
+package com.testsigma.addons.android;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.AndroidAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Map;
+
+@Action(actionText = "store total column count of TDP tdp-id for the set name set-name using the apikey" +
+ " api-key into variable column-count-variable",
+ description = "Get total column count of TDP",
+ applicationType = ApplicationType.ANDROID,
+ useCustomScreenshot = false)
+public class GetTDPColumncount extends AndroidAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-count-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ int totalColumnCount = parameterValues.size();
+ runTimeData.setKey(testData4.getValue().toString());
+ runTimeData.setValue(String.valueOf(totalColumnCount));
+ logger.info("Total column count: " + totalColumnCount);
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ logger.info("Error occurred while getting total column count of TDP: " + e.getMessage());
+ setErrorMessage("Error occurred while getting total column count: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetTDPValue.java
new file mode 100644
index 00000000..bdc8fe55
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/GetTDPValue.java
@@ -0,0 +1,58 @@
+package com.testsigma.addons.android;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.AndroidAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+
+@Action(actionText = "get TDP tdp-id value for set name set-name and parameter parameter-name" +
+ " using the apikey api-key and store in variable runtime-variable",
+ description = "Gets the value of a specific parameter/column for a given set name in the TDP" +
+ " and stores it in a runtime variable.",
+ applicationType = ApplicationType.ANDROID,
+ useCustomScreenshot = false)
+public class GetTDPValue extends AndroidAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData runtimeVariable;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating GetTDPValue execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpIdStr, setNameStr, apiKeyStr, logger);
+ if (!parameterValues.containsKey(paramName)) {
+ setErrorMessage("Parameter " + paramName + " not found in set " + setNameStr + ". Available parameters: " + parameterValues.keySet());
+ return Result.FAILED;
+ }
+ String value = parameterValues.get(paramName);
+ runTimeData.setKey(runtimeVariable.getValue().toString());
+ runTimeData.setValue(value);
+ setSuccessMessage("Successfully retrieved parameter " + paramName + " = " + value + " from set " + setNameStr + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to get TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/SetTDpIteratorToZero.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/SetTDpIteratorToZero.java
new file mode 100644
index 00000000..00f4c93a
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/SetTDpIteratorToZero.java
@@ -0,0 +1,39 @@
+package com.testsigma.addons.android;
+
+import com.testsigma.sdk.AndroidAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Objects;
+
+@Action(actionText = "set TDP iterator TDP_ITERATOR_KEY_NAME value to 0",
+ description = "Set TDP iterator TDP_ITERATOR_KEY_NAME to 0",
+ applicationType = ApplicationType.ANDROID,
+ useCustomScreenshot = false)
+public class SetTDpIteratorToZero extends AndroidAction {
+
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData1;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ if (!Objects.equals(testData1.getValue().toString(), "TDP_ITERATOR_KEY_NAME")) {
+ setErrorMessage("Don't change the TDP_ITERATOR_KEY_NAME variable name");
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ try {
+ runTimeData.setValue("0");
+ runTimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ setSuccessMessage("Set TDP iterator TDP_ITERATOR_KEY_NAME to 0");
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while setting runtime variable to 0: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/StoreNextColumnTdpValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/StoreNextColumnTdpValue.java
new file mode 100644
index 00000000..e240ea93
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/StoreNextColumnTdpValue.java
@@ -0,0 +1,88 @@
+package com.testsigma.addons.android;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.AndroidAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestCaseResult;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+import java.util.ArrayList;
+
+@Action(actionText = "store next column name and value from TDP tdp-id for the set name set-name using" +
+ " the apikey api-key and iterator TDP_ITERATOR_KEY_NAME in the runtime variables column-name and column-value",
+ description = "Store next column name and value from TDP for the given set name using iterator",
+ applicationType = ApplicationType.ANDROID,
+ useCustomScreenshot = false)
+public class StoreNextColumnTdpValue extends AndroidAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-name", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnNameTestData;
+ @TestData(reference = "column-value", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnValueTestData;
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData5;
+ @TestCaseResult
+ private com.testsigma.sdk.TestCaseResult testCaseResult;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData runTimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData iteratorRuntimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData columnNameRuntimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ try {
+ int iteratorValue = Integer.parseInt(testData5.getValue().toString());
+ ArrayList columnValuesList = new ArrayList<>();
+ ArrayList columnNamesList = new ArrayList<>();
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ String key = entry.getKey();
+ if (key.equals("S.No.") || key.equals("ETF") || key.equals("Set Name")) continue;
+ columnValuesList.add(entry.getValue());
+ columnNamesList.add(key);
+ }
+ if (iteratorValue > columnValuesList.size() - 1) {
+ setErrorMessage("Iterator index " + iteratorValue + " exceeds available columns " + columnValuesList.size());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ runTimeData.setValue(columnValuesList.get(iteratorValue));
+ runTimeData.setKey(columnValueTestData.getValue().toString());
+ columnNameRuntimeData.setValue(columnNamesList.get(iteratorValue));
+ columnNameRuntimeData.setKey(columnNameTestData.getValue().toString());
+ setSuccessMessage("Successfully retrieved and stored next column data i.e " + columnValuesList.get(iteratorValue) +
+ " for set name: " + setName + "");
+ iteratorValue++;
+ iteratorRuntimeData.setValue(String.valueOf(iteratorValue));
+ iteratorRuntimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ } catch (NumberFormatException e) {
+ setErrorMessage("Error occurred while parsing iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ } catch (Exception e) {
+ logger.warn("Error occurred while processing TDP data: " + e.getMessage());
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ return com.testsigma.sdk.Result.SUCCESS;
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/UpdateTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/UpdateTDPValue.java
new file mode 100644
index 00000000..e6368639
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/android/UpdateTDPValue.java
@@ -0,0 +1,54 @@
+package com.testsigma.addons.android;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.AndroidAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Action(actionText = "update TDP tdp-id set name set-name parameter parameter-name with value parameter-value" +
+ " using the apikey api-key",
+ description = "Updates the value of a specific parameter/column for a given set name in the TDP.",
+ applicationType = ApplicationType.ANDROID,
+ useCustomScreenshot = false)
+public class UpdateTDPValue extends AndroidAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "parameter-value")
+ private com.testsigma.sdk.TestData parameterValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating UpdateTDPValue execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String paramValue = parameterValue.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ logger.info("TDP ID: " + tdpIdStr + ", Set Name: " + setNameStr + ", Parameter: " + paramName + ", Value: " + paramValue);
+ try {
+ Map updatedData = new LinkedHashMap<>();
+ updatedData.put(paramName, paramValue);
+ TDPApiUtil.updateTDPIterationData(tdpIdStr, setNameStr, updatedData, apiKeyStr, logger);
+ logger.info("TDP update successful");
+ setSuccessMessage("Successfully updated parameter " + paramName + " to " + paramValue + " in set " + setNameStr + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ logger.info("Error occurred while updating TDP value: " + e.getMessage());
+ setErrorMessage("Failed to update TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/AddColumnToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/AddColumnToTDP.java
new file mode 100644
index 00000000..1682e40d
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/AddColumnToTDP.java
@@ -0,0 +1,47 @@
+package com.testsigma.addons.ios;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.IOSAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+@Action(actionText = "add new column column-name with default value default-value to TDP tdp-id" +
+ " using the apikey api-key",
+ description = "Adds a new parameter/column to an existing TDP with the specified default value for all rows.",
+ applicationType = ApplicationType.IOS,
+ useCustomScreenshot = false)
+public class AddColumnToTDP extends IOSAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "column-name")
+ private com.testsigma.sdk.TestData columnName;
+ @TestData(reference = "default-value")
+ private com.testsigma.sdk.TestData defaultValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddColumnToTDP execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String colName = columnName.getValue().toString().trim();
+ String defValue = defaultValue.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ if (colName.isEmpty()) {
+ setErrorMessage("Column name cannot be empty");
+ return Result.FAILED;
+ }
+ try {
+ TDPApiUtil.addTDPColumn(tdpIdStr, colName, defValue, apiKeyStr, logger);
+ setSuccessMessage("Successfully added new column " + colName + " with default value " + defValue + " to all rows in TDP");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add column to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/AddNewRowToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/AddNewRowToTDP.java
new file mode 100644
index 00000000..7c6512d2
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/AddNewRowToTDP.java
@@ -0,0 +1,39 @@
+package com.testsigma.addons.ios;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.IOSAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+@Action(actionText = "add new row row-name to TDP tdp-id using the apikey api-key",
+ description = "Adds a new row/set to an existing TDP with empty values for all existing parameters.",
+ applicationType = ApplicationType.IOS,
+ useCustomScreenshot = false)
+public class AddNewRowToTDP extends IOSAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "row-name")
+ private com.testsigma.sdk.TestData rowName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddNewRowToTDP execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String rowNameStr = rowName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ TDPApiUtil.addTDPRowWithEmptyData(tdpIdStr, rowNameStr, apiKeyStr, logger);
+ setSuccessMessage("Successfully added new row " + rowNameStr + " to TDP with empty parameter values");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add new row to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetEntireRowFromTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetEntireRowFromTDP.java
new file mode 100644
index 00000000..8125d3f7
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetEntireRowFromTDP.java
@@ -0,0 +1,54 @@
+package com.testsigma.addons.ios;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.IOSAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+
+@Action(actionText = "get entire row from TDP tdp-id for the set name set-name using the apikey api-key and" +
+ " store data in the run time variable runtime-variable",
+ description = "Get entire row from TDP",
+ applicationType = ApplicationType.IOS,
+ useCustomScreenshot = false)
+public class GetEntireRowFromTDP extends IOSAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ String resultVariable = "";
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ String key = entry.getKey();
+ if (key.equals("S.No.") || key.equals("ETF") || key.equals("Set Name")) continue;
+ resultVariable += entry.getValue() + ", ";
+ }
+ resultVariable = resultVariable.substring(0, resultVariable.length() - 2);
+ runTimeData.setValue(resultVariable);
+ runTimeData.setKey(testData4.getValue().toString());
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetTDPColumncount.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetTDPColumncount.java
new file mode 100644
index 00000000..98aef38d
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetTDPColumncount.java
@@ -0,0 +1,47 @@
+package com.testsigma.addons.ios;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.IOSAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Map;
+
+@Action(actionText = "store total column count of TDP tdp-id for the set name set-name using the apikey" +
+ " api-key into variable column-count-variable",
+ description = "Get total column count of TDP",
+ applicationType = ApplicationType.IOS,
+ useCustomScreenshot = false)
+public class GetTDPColumncount extends IOSAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-count-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ int totalColumnCount = parameterValues.size();
+ runTimeData.setKey(testData4.getValue().toString());
+ runTimeData.setValue(String.valueOf(totalColumnCount));
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting total column count: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetTDPValue.java
new file mode 100644
index 00000000..b23ac87a
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/GetTDPValue.java
@@ -0,0 +1,58 @@
+package com.testsigma.addons.ios;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.IOSAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+
+@Action(actionText = "get TDP tdp-id value for set name set-name and parameter parameter-name" +
+ " using the apikey api-key and store in variable runtime-variable",
+ description = "Gets the value of a specific parameter/column for a given set name in the TDP" +
+ " and stores it in a runtime variable.",
+ applicationType = ApplicationType.IOS,
+ useCustomScreenshot = false)
+public class GetTDPValue extends IOSAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData runtimeVariable;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating GetTDPValue execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpIdStr, setNameStr, apiKeyStr, logger);
+ if (!parameterValues.containsKey(paramName)) {
+ setErrorMessage("Parameter " + paramName + " not found in set " + setNameStr + ". Available parameters: " + parameterValues.keySet());
+ return Result.FAILED;
+ }
+ String value = parameterValues.get(paramName);
+ runTimeData.setKey(runtimeVariable.getValue().toString());
+ runTimeData.setValue(value);
+ setSuccessMessage("Successfully retrieved parameter " + paramName + " = " + value + " from set " + setNameStr + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to get TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/SetTDpIteratorToZero.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/SetTDpIteratorToZero.java
new file mode 100644
index 00000000..187e2777
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/SetTDpIteratorToZero.java
@@ -0,0 +1,39 @@
+package com.testsigma.addons.ios;
+
+import com.testsigma.sdk.IOSAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Objects;
+
+@Action(actionText = "set TDP iterator TDP_ITERATOR_KEY_NAME value to 0",
+ description = "Set TDP iterator TDP_ITERATOR_KEY_NAME to 0",
+ applicationType = ApplicationType.IOS,
+ useCustomScreenshot = false)
+public class SetTDpIteratorToZero extends IOSAction {
+
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData1;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ if (!Objects.equals(testData1.getValue().toString(), "TDP_ITERATOR_KEY_NAME")) {
+ setErrorMessage("Don't change the TDP_ITERATOR_KEY_NAME variable name");
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ try {
+ runTimeData.setValue("0");
+ runTimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ setSuccessMessage("Set TDP iterator TDP_ITERATOR_KEY_NAME to 0");
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while setting runtime variable to 0: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/StoreNextColumnTdpValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/StoreNextColumnTdpValue.java
new file mode 100644
index 00000000..0ae7ed44
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/StoreNextColumnTdpValue.java
@@ -0,0 +1,87 @@
+package com.testsigma.addons.ios;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.IOSAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestCaseResult;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+import java.util.ArrayList;
+
+@Action(actionText = "store next column name and value from TDP tdp-id for the set name set-name using" +
+ " the apikey api-key and iterator TDP_ITERATOR_KEY_NAME in the runtime variables column-name and column-value",
+ description = "Store next column name and value from TDP for the given set name using iterator",
+ applicationType = ApplicationType.IOS,
+ useCustomScreenshot = false)
+public class StoreNextColumnTdpValue extends IOSAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-name", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnNameTestData;
+ @TestData(reference = "column-value", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnValueTestData;
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData5;
+ @TestCaseResult
+ private com.testsigma.sdk.TestCaseResult testCaseResult;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData runTimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData iteratorRuntimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData columnNameRuntimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ try {
+ int iteratorValue = Integer.parseInt(testData5.getValue().toString());
+ ArrayList columnValuesList = new ArrayList<>();
+ ArrayList columnNamesList = new ArrayList<>();
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ String key = entry.getKey();
+ if (key.equals("S.No.") || key.equals("ETF") || key.equals("Set Name")) continue;
+ columnValuesList.add(entry.getValue());
+ columnNamesList.add(key);
+ }
+ if (iteratorValue > columnValuesList.size() - 1) {
+ setErrorMessage("Iterator index " + iteratorValue + " exceeds available columns " + columnValuesList.size());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ runTimeData.setValue(columnValuesList.get(iteratorValue));
+ runTimeData.setKey(columnValueTestData.getValue().toString());
+ columnNameRuntimeData.setValue(columnNamesList.get(iteratorValue));
+ columnNameRuntimeData.setKey(columnNameTestData.getValue().toString());
+ setSuccessMessage("Successfully retrieved and stored next column data i.e " + columnValuesList.get(iteratorValue) +
+ " for set name: " + setName + "");
+ iteratorValue++;
+ iteratorRuntimeData.setValue(String.valueOf(iteratorValue));
+ iteratorRuntimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ } catch (NumberFormatException e) {
+ setErrorMessage("Error occurred while parsing iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ return com.testsigma.sdk.Result.SUCCESS;
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/UpdateTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/UpdateTDPValue.java
new file mode 100644
index 00000000..cbb9b209
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/ios/UpdateTDPValue.java
@@ -0,0 +1,51 @@
+package com.testsigma.addons.ios;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.IOSAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Action(actionText = "update TDP tdp-id set name set-name parameter parameter-name with value parameter-value" +
+ " using the apikey api-key",
+ description = "Updates the value of a specific parameter/column for a given set name in the TDP.",
+ applicationType = ApplicationType.IOS,
+ useCustomScreenshot = false)
+public class UpdateTDPValue extends IOSAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "parameter-value")
+ private com.testsigma.sdk.TestData parameterValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating UpdateTDPValue execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String paramValue = parameterValue.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ Map updatedData = new LinkedHashMap<>();
+ updatedData.put(paramName, paramValue);
+ TDPApiUtil.updateTDPIterationData(tdpIdStr, setNameStr, updatedData, apiKeyStr, logger);
+ setSuccessMessage("Successfully updated parameter " + paramName + " to " + paramValue + " in set " + setNameStr + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to update TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/AddColumnToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/AddColumnToTDP.java
new file mode 100644
index 00000000..5604bb84
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/AddColumnToTDP.java
@@ -0,0 +1,44 @@
+package com.testsigma.addons.mobileweb;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+@Action(actionText = "add new column column-name with default value default-value to TDP tdp-id" +
+ " using the apikey api-key",
+ description = "Adds a new parameter/column to an existing TDP with the specified default value for all rows.",
+ applicationType = ApplicationType.MOBILE_WEB,
+ useCustomScreenshot = false)
+public class AddColumnToTDP extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "column-name")
+ private com.testsigma.sdk.TestData columnName;
+ @TestData(reference = "default-value")
+ private com.testsigma.sdk.TestData defaultValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddColumnToTDP execution");
+ String colName = columnName.getValue().toString().trim();
+ if (colName.isEmpty()) {
+ setErrorMessage("Column name cannot be empty");
+ return Result.FAILED;
+ }
+ try {
+ TDPApiUtil.addTDPColumn(tdpId.getValue().toString().trim(), colName, defaultValue.getValue().toString().trim(), apiKey.getValue().toString().trim(), logger);
+ setSuccessMessage("Successfully added new column " + colName + " with default value " + defaultValue.getValue() + " to all rows in TDP");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add column to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/AddNewRowToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/AddNewRowToTDP.java
new file mode 100644
index 00000000..6b78efde
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/AddNewRowToTDP.java
@@ -0,0 +1,39 @@
+package com.testsigma.addons.mobileweb;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+@Action(actionText = "add new row row-name to TDP tdp-id using the apikey api-key",
+ description = "Adds a new row/set to an existing TDP with empty values for all existing parameters.",
+ applicationType = ApplicationType.MOBILE_WEB,
+ useCustomScreenshot = false)
+public class AddNewRowToTDP extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "row-name")
+ private com.testsigma.sdk.TestData rowName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddNewRowToTDP execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String rowNameStr = rowName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ TDPApiUtil.addTDPRowWithEmptyData(tdpIdStr, rowNameStr, apiKeyStr, logger);
+ setSuccessMessage("Successfully added new row " + rowNameStr + " to TDP with empty parameter values");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add new row to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetEntireRowFromTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetEntireRowFromTDP.java
new file mode 100644
index 00000000..302abf18
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetEntireRowFromTDP.java
@@ -0,0 +1,50 @@
+package com.testsigma.addons.mobileweb;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+
+@Action(actionText = "get entire row from TDP tdp-id for the set name set-name using the apikey api-key and" +
+ " store data in the run time variable runtime-variable",
+ description = "Get entire row from TDP",
+ applicationType = ApplicationType.MOBILE_WEB,
+ useCustomScreenshot = false)
+public class GetEntireRowFromTDP extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
+ logger.info("Initiating execution");
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(testData1.getValue().toString(), testData2.getValue().toString(), testData3.getValue().toString(), logger);
+ String resultVariable = "";
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ if (entry.getKey().equals("S.No.") || entry.getKey().equals("ETF") || entry.getKey().equals("Set Name")) continue;
+ resultVariable += entry.getValue() + ", ";
+ }
+ resultVariable = resultVariable.substring(0, resultVariable.length() - 2);
+ runTimeData.setValue(resultVariable);
+ runTimeData.setKey(testData4.getValue().toString());
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetTDPColumncount.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetTDPColumncount.java
new file mode 100644
index 00000000..1f755dc8
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetTDPColumncount.java
@@ -0,0 +1,44 @@
+package com.testsigma.addons.mobileweb;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Map;
+
+@Action(actionText = "store total column count of TDP tdp-id for the set name set-name using the apikey" +
+ " api-key into variable column-count-variable",
+ description = "Get total column count of TDP",
+ applicationType = ApplicationType.MOBILE_WEB,
+ useCustomScreenshot = false)
+public class GetTDPColumncount extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-count-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(testData1.getValue().toString(), testData2.getValue().toString(), testData3.getValue().toString(), logger);
+ int totalColumnCount = parameterValues.size();
+ runTimeData.setKey(testData4.getValue().toString());
+ runTimeData.setValue(String.valueOf(totalColumnCount));
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting total column count: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetTDPValue.java
new file mode 100644
index 00000000..a72bb320
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/GetTDPValue.java
@@ -0,0 +1,58 @@
+package com.testsigma.addons.mobileweb;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+
+@Action(actionText = "get TDP tdp-id value for set name set-name and parameter parameter-name" +
+ " using the apikey api-key and store in variable runtime-variable",
+ description = "Gets the value of a specific parameter/column for a given set name in the TDP" +
+ " and stores it in a runtime variable.",
+ applicationType = ApplicationType.MOBILE_WEB,
+ useCustomScreenshot = false)
+public class GetTDPValue extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData runtimeVariable;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating GetTDPValue execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpIdStr, setNameStr, apiKeyStr, logger);
+ if (!parameterValues.containsKey(paramName)) {
+ setErrorMessage("Parameter " + paramName + " not found in set " + setNameStr + ". Available parameters: " + parameterValues.keySet());
+ return Result.FAILED;
+ }
+ String value = parameterValues.get(paramName);
+ runTimeData.setKey(runtimeVariable.getValue().toString());
+ runTimeData.setValue(value);
+ setSuccessMessage("Successfully retrieved parameter " + paramName + " = " + value + " from set " + setNameStr + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to get TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/SetTDpIteratorToZero.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/SetTDpIteratorToZero.java
new file mode 100644
index 00000000..4edab676
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/SetTDpIteratorToZero.java
@@ -0,0 +1,39 @@
+package com.testsigma.addons.mobileweb;
+
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Objects;
+
+@Action(actionText = "set TDP iterator TDP_ITERATOR_KEY_NAME value to 0",
+ description = "Set TDP iterator TDP_ITERATOR_KEY_NAME to 0",
+ applicationType = ApplicationType.MOBILE_WEB,
+ useCustomScreenshot = false)
+public class SetTDpIteratorToZero extends WebAction {
+
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData1;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ if (!Objects.equals(testData1.getValue().toString(), "TDP_ITERATOR_KEY_NAME")) {
+ setErrorMessage("Don't change the TDP_ITERATOR_KEY_NAME variable name");
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ try {
+ runTimeData.setValue("0");
+ runTimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ setSuccessMessage("Set TDP iterator TDP_ITERATOR_KEY_NAME to 0");
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while setting runtime variable to 0: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/StoreNextColumnTdpValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/StoreNextColumnTdpValue.java
new file mode 100644
index 00000000..5a1c618c
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/StoreNextColumnTdpValue.java
@@ -0,0 +1,87 @@
+package com.testsigma.addons.mobileweb;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestCaseResult;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+import java.util.ArrayList;
+
+@Action(actionText = "store next column name and value from TDP tdp-id for the set name set-name using" +
+ " the apikey api-key and iterator TDP_ITERATOR_KEY_NAME in the runtime variables column-name and column-value",
+ description = "Store next column name and value from TDP for the given set name using iterator",
+ applicationType = ApplicationType.MOBILE_WEB,
+ useCustomScreenshot = false)
+public class StoreNextColumnTdpValue extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-name", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnNameTestData;
+ @TestData(reference = "column-value", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnValueTestData;
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData5;
+ @TestCaseResult
+ private com.testsigma.sdk.TestCaseResult testCaseResult;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData runTimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData iteratorRuntimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData columnNameRuntimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ try {
+ int iteratorValue = Integer.parseInt(testData5.getValue().toString());
+ ArrayList columnValuesList = new ArrayList<>();
+ ArrayList columnNamesList = new ArrayList<>();
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ String key = entry.getKey();
+ if (key.equals("S.No.") || key.equals("ETF") || key.equals("Set Name")) continue;
+ columnValuesList.add(entry.getValue());
+ columnNamesList.add(key);
+ }
+ if (iteratorValue > columnValuesList.size() - 1) {
+ setErrorMessage("Iterator index " + iteratorValue + " exceeds available columns " + columnValuesList.size());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ runTimeData.setValue(columnValuesList.get(iteratorValue));
+ runTimeData.setKey(columnValueTestData.getValue().toString());
+ columnNameRuntimeData.setValue(columnNamesList.get(iteratorValue));
+ columnNameRuntimeData.setKey(columnNameTestData.getValue().toString());
+ setSuccessMessage("Successfully retrieved and stored next column data i.e " + columnValuesList.get(iteratorValue) +
+ " for set name: " + setName + "");
+ iteratorValue++;
+ iteratorRuntimeData.setValue(String.valueOf(iteratorValue));
+ iteratorRuntimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ } catch (NumberFormatException e) {
+ setErrorMessage("Error occurred while parsing iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ return com.testsigma.sdk.Result.SUCCESS;
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/UpdateTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/UpdateTDPValue.java
new file mode 100644
index 00000000..bd3b01a2
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/mobileweb/UpdateTDPValue.java
@@ -0,0 +1,46 @@
+package com.testsigma.addons.mobileweb;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Action(actionText = "update TDP tdp-id set name set-name parameter parameter-name with value parameter-value" +
+ " using the apikey api-key",
+ description = "Updates the value of a specific parameter/column for a given set name in the TDP.",
+ applicationType = ApplicationType.MOBILE_WEB,
+ useCustomScreenshot = false)
+public class UpdateTDPValue extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "parameter-value")
+ private com.testsigma.sdk.TestData parameterValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating UpdateTDPValue execution");
+ try {
+ Map updatedData = new LinkedHashMap<>();
+ updatedData.put(parameterName.getValue().toString().trim(), parameterValue.getValue().toString().trim());
+ TDPApiUtil.updateTDPIterationData(tdpId.getValue().toString().trim(), setName.getValue().toString().trim(), updatedData, apiKey.getValue().toString().trim(), logger);
+ setSuccessMessage("Successfully updated parameter " + parameterName.getValue() + " to " + parameterValue.getValue() + " in set " + setName.getValue() + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to update TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/AddColumnToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/AddColumnToTDP.java
new file mode 100644
index 00000000..24cf91d7
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/AddColumnToTDP.java
@@ -0,0 +1,45 @@
+package com.testsigma.addons.salesforce;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.SalesforceAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+
+import java.util.NoSuchElementException;
+
+@Action(actionText = "add new column column-name with default value default-value to TDP tdp-id" +
+ " using the apikey api-key",
+ description = "Adds a new parameter/column to an existing TDP with the specified default value for all rows.",
+ applicationType = ApplicationType.Salesforce,
+ useCustomScreenshot = false)
+public class AddColumnToTDP extends SalesforceAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "column-name")
+ private com.testsigma.sdk.TestData columnName;
+ @TestData(reference = "default-value")
+ private com.testsigma.sdk.TestData defaultValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddColumnToTDP execution");
+ String colName = columnName.getValue().toString().trim();
+ if (colName.isEmpty()) {
+ setErrorMessage("Column name cannot be empty");
+ return Result.FAILED;
+ }
+ try {
+ TDPApiUtil.addTDPColumn(tdpId.getValue().toString().trim(), colName, defaultValue.getValue().toString().trim(), apiKey.getValue().toString().trim(), logger);
+ setSuccessMessage("Successfully added new column " + colName + " with default value " + defaultValue.getValue() + " to all rows in TDP");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add column to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/AddNewRowToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/AddNewRowToTDP.java
new file mode 100644
index 00000000..efbd3957
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/AddNewRowToTDP.java
@@ -0,0 +1,40 @@
+package com.testsigma.addons.salesforce;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.SalesforceAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+
+import java.util.NoSuchElementException;
+
+@Action(actionText = "add new row row-name to TDP tdp-id using the apikey api-key",
+ description = "Adds a new row/set to an existing TDP with empty values for all existing parameters.",
+ applicationType = ApplicationType.Salesforce,
+ useCustomScreenshot = false)
+public class AddNewRowToTDP extends SalesforceAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "row-name")
+ private com.testsigma.sdk.TestData rowName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddNewRowToTDP execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String rowNameStr = rowName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ TDPApiUtil.addTDPRowWithEmptyData(tdpIdStr, rowNameStr, apiKeyStr, logger);
+ setSuccessMessage("Successfully added new row " + rowNameStr + " to TDP with empty parameter values");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add new row to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetEntireRowFromTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetEntireRowFromTDP.java
new file mode 100644
index 00000000..5109e42c
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetEntireRowFromTDP.java
@@ -0,0 +1,50 @@
+package com.testsigma.addons.salesforce;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.SalesforceAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+@Action(actionText = "get entire row from TDP tdp-id for the set name set-name using the apikey api-key and" +
+ " store data in the run time variable runtime-variable",
+ description = "Get entire row from TDP",
+ applicationType = ApplicationType.Salesforce,
+ useCustomScreenshot = false)
+public class GetEntireRowFromTDP extends SalesforceAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
+ logger.info("Initiating execution");
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(testData1.getValue().toString(), testData2.getValue().toString(), testData3.getValue().toString(), logger);
+ String resultVariable = "";
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ if (entry.getKey().equals("S.No.") || entry.getKey().equals("ETF") || entry.getKey().equals("Set Name")) continue;
+ resultVariable += entry.getValue() + ", ";
+ }
+ resultVariable = resultVariable.substring(0, resultVariable.length() - 2);
+ runTimeData.setValue(resultVariable);
+ runTimeData.setKey(testData4.getValue().toString());
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetTDPColumncount.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetTDPColumncount.java
new file mode 100644
index 00000000..fb866b49
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetTDPColumncount.java
@@ -0,0 +1,44 @@
+package com.testsigma.addons.salesforce;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.SalesforceAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Map;
+
+@Action(actionText = "store total column count of TDP tdp-id for the set name set-name using the apikey" +
+ " api-key into variable column-count-variable",
+ description = "Get total column count of TDP",
+ applicationType = ApplicationType.Salesforce,
+ useCustomScreenshot = false)
+public class GetTDPColumncount extends SalesforceAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-count-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(testData1.getValue().toString(), testData2.getValue().toString(), testData3.getValue().toString(), logger);
+ int totalColumnCount = parameterValues.size();
+ runTimeData.setKey(testData4.getValue().toString());
+ runTimeData.setValue(String.valueOf(totalColumnCount));
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting total column count: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetTDPValue.java
new file mode 100644
index 00000000..d54e5e61
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/GetTDPValue.java
@@ -0,0 +1,58 @@
+package com.testsigma.addons.salesforce;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.SalesforceAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestData;
+
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+@Action(actionText = "get TDP tdp-id value for set name set-name and parameter parameter-name" +
+ " using the apikey api-key and store in variable runtime-variable",
+ description = "Gets the value of a specific parameter/column for a given set name in the TDP" +
+ " and stores it in a runtime variable.",
+ applicationType = ApplicationType.Salesforce,
+ useCustomScreenshot = false)
+public class GetTDPValue extends SalesforceAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData runtimeVariable;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating GetTDPValue execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpIdStr, setNameStr, apiKeyStr, logger);
+ if (!parameterValues.containsKey(paramName)) {
+ setErrorMessage("Parameter " + paramName + " not found in set " + setNameStr + ". Available parameters: " + parameterValues.keySet());
+ return Result.FAILED;
+ }
+ String value = parameterValues.get(paramName);
+ runTimeData.setKey(runtimeVariable.getValue().toString());
+ runTimeData.setValue(value);
+ setSuccessMessage("Successfully retrieved parameter " + paramName + " = " + value + " from set " + setNameStr + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to get TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/SetTDpIteratorToZero.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/SetTDpIteratorToZero.java
new file mode 100644
index 00000000..e05362d9
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/SetTDpIteratorToZero.java
@@ -0,0 +1,39 @@
+package com.testsigma.addons.salesforce;
+
+import com.testsigma.sdk.SalesforceAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Objects;
+
+@Action(actionText = "set TDP iterator TDP_ITERATOR_KEY_NAME value to 0",
+ description = "Set TDP iterator TDP_ITERATOR_KEY_NAME to 0",
+ applicationType = ApplicationType.Salesforce,
+ useCustomScreenshot = false)
+public class SetTDpIteratorToZero extends SalesforceAction {
+
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData1;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ if (!Objects.equals(testData1.getValue().toString(), "TDP_ITERATOR_KEY_NAME")) {
+ setErrorMessage("Don't change the TDP_ITERATOR_KEY_NAME variable name");
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ try {
+ runTimeData.setValue("0");
+ runTimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ setSuccessMessage("Set TDP iterator TDP_ITERATOR_KEY_NAME to 0");
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while setting runtime variable to 0: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/StoreNextColumnTdpValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/StoreNextColumnTdpValue.java
new file mode 100644
index 00000000..43693906
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/StoreNextColumnTdpValue.java
@@ -0,0 +1,87 @@
+package com.testsigma.addons.salesforce;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.SalesforceAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestCaseResult;
+
+import java.util.Map;
+import java.util.ArrayList;
+import java.util.NoSuchElementException;
+
+@Action(actionText = "store next column name and value from TDP tdp-id for the set name set-name using" +
+ " the apikey api-key and iterator TDP_ITERATOR_KEY_NAME in the runtime variables column-name and column-value",
+ description = "Store next column name and value from TDP for the given set name using iterator",
+ applicationType = ApplicationType.Salesforce,
+ useCustomScreenshot = false)
+public class StoreNextColumnTdpValue extends SalesforceAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-name", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnNameTestData;
+ @TestData(reference = "column-value", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnValueTestData;
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData5;
+ @TestCaseResult
+ private com.testsigma.sdk.TestCaseResult testCaseResult;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData runTimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData iteratorRuntimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData columnNameRuntimeData;
+
+ @Override
+ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ try {
+ int iteratorValue = Integer.parseInt(testData5.getValue().toString());
+ ArrayList columnValuesList = new ArrayList<>();
+ ArrayList columnNamesList = new ArrayList<>();
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ String key = entry.getKey();
+ if (key.equals("S.No.") || key.equals("ETF") || key.equals("Set Name")) continue;
+ columnValuesList.add(entry.getValue());
+ columnNamesList.add(key);
+ }
+ if (iteratorValue > columnValuesList.size() - 1) {
+ setErrorMessage("Iterator index " + iteratorValue + " exceeds available columns " + columnValuesList.size());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ runTimeData.setValue(columnValuesList.get(iteratorValue));
+ runTimeData.setKey(columnValueTestData.getValue().toString());
+ columnNameRuntimeData.setValue(columnNamesList.get(iteratorValue));
+ columnNameRuntimeData.setKey(columnNameTestData.getValue().toString());
+ setSuccessMessage("Successfully retrieved and stored next column data i.e " + columnValuesList.get(iteratorValue) +
+ " for set name: " + setName + "");
+ iteratorValue++;
+ iteratorRuntimeData.setValue(String.valueOf(iteratorValue));
+ iteratorRuntimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ } catch (NumberFormatException e) {
+ setErrorMessage("Error occurred while parsing iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ return com.testsigma.sdk.Result.SUCCESS;
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/UpdateTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/UpdateTDPValue.java
new file mode 100644
index 00000000..87ead55f
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/salesforce/UpdateTDPValue.java
@@ -0,0 +1,46 @@
+package com.testsigma.addons.salesforce;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.SalesforceAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+@Action(actionText = "update TDP tdp-id set name set-name parameter parameter-name with value parameter-value" +
+ " using the apikey api-key",
+ description = "Updates the value of a specific parameter/column for a given set name in the TDP.",
+ applicationType = ApplicationType.Salesforce,
+ useCustomScreenshot = false)
+public class UpdateTDPValue extends SalesforceAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "parameter-value")
+ private com.testsigma.sdk.TestData parameterValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating UpdateTDPValue execution");
+ try {
+ Map updatedData = new LinkedHashMap<>();
+ updatedData.put(parameterName.getValue().toString().trim(), parameterValue.getValue().toString().trim());
+ TDPApiUtil.updateTDPIterationData(tdpId.getValue().toString().trim(), setName.getValue().toString().trim(), updatedData, apiKey.getValue().toString().trim(), logger);
+ setSuccessMessage("Successfully updated parameter " + parameterName.getValue() + " to " + parameterValue.getValue() + " in set " + setName.getValue() + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to update TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/util/TDPApiUtil.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/util/TDPApiUtil.java
index 9cad9c6e..df750307 100644
--- a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/util/TDPApiUtil.java
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/util/TDPApiUtil.java
@@ -2,66 +2,193 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.testsigma.sdk.Logger;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
+import org.apache.http.client.config.RequestConfig;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.IOException;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
/**
* Utility class for handling TDP (Test Data Profile) API requests and JSON parsing
*/
public class TDPApiUtil {
-
+ Logger logger;
+
+ TDPApiUtil(Logger logger) {
+ this.logger = logger;
+ }
+
private static final ObjectMapper objectMapper = new ObjectMapper();
-
+
/**
* Makes an HTTP GET request to the TDP API and returns the response body
- *
- * @param url The API URL
+ *
+ * @param url The API URL
* @param apiKey The Bearer token for authentication
* @return The response body as a string
* @throws Exception if the HTTP request fails
*/
- public static String makeHttpRequest(String url, String apiKey) throws Exception {
- CloseableHttpClient httpClient = HttpClients.createDefault();
+ public static String makeHttpRequest(String url, String apiKey, Logger logger) throws Exception {
+ logger.info("Preparing to make HTTP GET request to URL: " + url);
+ // Create SSL context that accepts all certificates
+ SSLContext sslContext = SSLContextBuilder
+ .create()
+ .loadTrustMaterial((chain, authType) -> true)
+ .build();
+ logger.info("SSL context created to trust all certificates");
+ // Create SSL socket factory with no hostname verification
+ SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
+ sslContext,
+ NoopHostnameVerifier.INSTANCE
+ );
+ logger.info("SSL socket factory created with NoopHostnameVerifier");
+
+ // Configure request with timeouts (10 seconds for connect, 30 seconds for socket, 60 seconds for connection request)
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setConnectTimeout(10000) // 10 seconds
+ .setSocketTimeout(30000) // 30 seconds
+ .setConnectionRequestTimeout(60000) // 60 seconds
+ .build();
+ logger.info("Request configuration set with timeouts");
+ // Create HttpClient with SSL verification disabled
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setSSLSocketFactory(sslSocketFactory)
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+ logger.info("HttpClient created with custom SSL socket factory and request configuration");
HttpGet httpGet = new HttpGet(url);
-
+
// Set headers
httpGet.setHeader("Accept", "application/json");
httpGet.setHeader("Content-Type", "application/json");
httpGet.setHeader("Authorization", "Bearer " + apiKey);
-
+ logger.info("HTTP GET request headers set");
+ logger.info("httpGet Details: " + httpGet);
+ logger.info("Headers" + Arrays.toString(httpGet.getAllHeaders()));
// Make the API call
- CloseableHttpResponse response = httpClient.execute(httpGet);
- String responseBody = EntityUtils.toString(response.getEntity());
- httpClient.close();
-
+ try {
+ logger.info("Executing HTTP GET request");
+ CloseableHttpResponse response = httpClient.execute(httpGet);
+ logger.info("HTTP GET request executed, received response with status code: "
+ + response.getStatusLine().getStatusCode());
+ String responseBody = EntityUtils.toString(response.getEntity());
+ logger.info("Response body received");
+ return responseBody;
+ } catch (Exception e) {
+ logger.info("Error occurred while making HTTP request: " + ExceptionUtils.getStackTrace(e));
+ throw new RuntimeException("Error occurred while making HTTP request: " + e.getMessage(), e);
+ } finally {
+ logger.info("Closing HttpClient");
+ httpClient.close();
+ }
+ }
+
+
+ public static String makeHttpRequest2(String requestUrl, String apikey, Logger logger) throws Exception {
+ TrustManager[] trustAllCerts = new TrustManager[]{
+ new X509TrustManager() {
+ @Override
+ public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
+ }
+
+ @Override
+ public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
+ }
+
+ @Override
+ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+ return new java.security.cert.X509Certificate[]{};
+ }
+ }
+ };
+ String responseBody = null;
+ try {
+ //trust certificates
+ SSLContext sslContext = SSLContext.getInstance("SSL");
+ sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+ OkHttpClient.Builder newBuilder = new OkHttpClient.Builder();
+ newBuilder.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0]);
+ newBuilder.hostnameVerifier((hostname, session) -> true);
+
+
+ OkHttpClient newClient = newBuilder.build();
+
+ // log the request details
+ logger.info("Making HTTP GET request to URL: " + requestUrl);
+ // add headers
+ Request request= new Request.Builder()
+ .url(requestUrl)
+ .addHeader("Accept", "application/json")
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Authorization", "Bearer " + apikey)
+ .build();
+
+ logger.info("Request Details: " + request);
+ okhttp3.Response response = newClient.newCall(request).execute();
+
+ // get response code
+ logger.info("Response code: " + response.code());
+
+ responseBody = response.body().string();
+ logger.info("Response body: " + responseBody);
+ } catch (Exception e) {
+ logger.info("Error occurred while making HTTP request: " + ExceptionUtils.getStackTrace(e));
+ throw new RuntimeException(e);
+ }
return responseBody;
+
+
}
-
+
/**
* Parses the TDP API response and extracts data for a specific iteration
- *
- * @param responseBody The JSON response body from the TDP API
+ *
+ * @param responseBody The JSON response body from the TDP API
* @param iterationName The name of the iteration to find (e.g., "iteration 1")
* @return A map containing the parameter values for the specified iteration
* @throws Exception if JSON parsing fails or iteration is not found
*/
- public static Map parseTDPResponse(String responseBody, String iterationName) throws Exception {
+ public static Map parseTDPResponse(String responseBody, String iterationName, Logger logger) throws Exception {
// Parse the JSON response
+ logger.info("Parsing TDP API response to extract iteration data for: " + iterationName);
JsonNode rootNode = objectMapper.readTree(responseBody);
-
+
+ logger.info("JSON response parsed successfully");
// Get the data array from the response
JsonNode dataArray = rootNode.get("data");
if (dataArray == null || !dataArray.isArray()) {
throw new RuntimeException("No data array found in the response");
}
-
+ logger.info("Data array found in the response with " + dataArray.size() + " iterations");
// Find the iteration with the matching name
+ logger.info("Searching for iteration with name: " + iterationName);
JsonNode matchingIteration = null;
for (JsonNode iteration : dataArray) {
String currentIterationName = iteration.get("name").asText();
@@ -70,40 +197,318 @@ public static Map parseTDPResponse(String responseBody, String i
break;
}
}
-
if (matchingIteration == null) {
throw new RuntimeException("No iteration found with name: " + iterationName);
}
-
+ logger.info("Matching iteration found: " + iterationName);
// Extract the data object from the matching iteration
JsonNode iterationData = matchingIteration.get("data");
if (iterationData == null) {
throw new RuntimeException("No data found in the matching iteration");
}
-
- // Store the parameter values
- Map parameterValues = new HashMap<>();
- iterationData.fields().forEachRemaining(entry -> {
- String key = entry.getKey();
- String value = entry.getValue().asText();
- parameterValues.put(key, value);
- });
-
+ logger.info("Extracting parameter values from the iteration data");
+
+ // Get the columns array from root node to preserve order
+ JsonNode columnsArray = rootNode.get("columns");
+ if (columnsArray == null || !columnsArray.isArray()) {
+ logger.warn("No columns array found in response, falling back to default iteration order");
+ }
+
+ // Store the parameter values in LinkedHashMap to preserve insertion order
+ Map parameterValues = new LinkedHashMap<>();
+
+ if (columnsArray != null && columnsArray.isArray()) {
+ // Iterate in the order specified by the columns array
+ logger.info("Iterating columns in the order specified by columns array");
+ for (JsonNode columnNode : columnsArray) {
+ String columnName = columnNode.asText();
+ JsonNode columnValue = iterationData.get(columnName);
+ if (columnValue != null && !columnValue.isNull()) {
+ // add only those values which have data within it, ignore columns with null values
+ if (columnValue.asText().trim().isEmpty()) {
+ logger.debug("Skipping column: " + columnName + " as it has empty value");
+ continue;
+ }
+ String value = columnValue.asText();
+ parameterValues.put(columnName, value);
+ logger.debug("Added column: " + columnName + " = " + value);
+ }
+ }
+ } else {
+ // Fallback: if columns array is not available, use the order from iterationData
+ logger.info("Using default iteration order from data object");
+ iterationData.fields().forEachRemaining(entry -> {
+ String key = entry.getKey();
+ String value = entry.getValue().asText();
+ parameterValues.put(key, value);
+ });
+ }
+
+ logger.info("Parameter values extracted successfully in column order: " + parameterValues);
+
return parameterValues;
}
-
+
/**
* Convenience method that combines HTTP request and JSON parsing
- *
- * @param tdpId The TDP ID
+ *
+ * @param tdpId The TDP ID
* @param iterationName The name of the iteration to retrieve
- * @param apiKey The Bearer token for authentication
+ * @param apiKey The Bearer token for authentication
* @return A map containing the parameter values for the specified iteration
* @throws Exception if the request or parsing fails
*/
- public static Map getTDPIterationData(String tdpId, String iterationName, String apiKey) throws Exception {
+ public static Map getTDPIterationData(String tdpId, String iterationName, String apiKey, Logger logger) throws Exception {
+ String url = "https://app.testsigma.com/api/v1/test_data/" + tdpId;
+ logger.info("Making request to TDP API URL: " + url);
+ String responseBody = makeHttpRequest2(url, apiKey, logger);
+ logger.info("Received response from TDP API");
+ return parseTDPResponse(responseBody, iterationName, logger);
+ }
+
+ /**
+ * Makes an HTTP request with a JSON body using OkHttp.
+ * Supports PUT, POST, and PATCH methods.
+ *
+ * @param url The API URL
+ * @param method The HTTP method (PUT, POST, PATCH)
+ * @param jsonBody The JSON body to send
+ * @param apiKey The Bearer token for authentication
+ * @param logger Logger instance
+ * @return The response body as a string
+ * @throws Exception if the request fails or returns a non-2xx status
+ */
+ public static String makeHttpRequestWithBody(String url, String method, String jsonBody,
+ String apiKey, Logger logger) throws Exception {
+ logger.info("Preparing " + method + " request to URL: " + url);
+ logger.info("Request body: " + jsonBody);
+
+ TrustManager[] trustAllCerts = new TrustManager[]{
+ new X509TrustManager() {
+ @Override
+ public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
+ }
+ @Override
+ public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
+ }
+ @Override
+ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+ return new java.security.cert.X509Certificate[]{};
+ }
+ }
+ };
+
+ SSLContext sslContext = SSLContext.getInstance("SSL");
+ sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+ OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
+ clientBuilder.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0]);
+ clientBuilder.hostnameVerifier((hostname, session) -> true);
+ OkHttpClient client = clientBuilder.build();
+
+ MediaType JSON = MediaType.parse("application/json; charset=utf-8");
+ RequestBody body = RequestBody.create(jsonBody, JSON);
+
+ Request.Builder requestBuilder = new Request.Builder()
+ .url(url)
+ .addHeader("Accept", "application/json")
+ .addHeader("Authorization", "Bearer " + apiKey);
+
+ switch (method.toUpperCase()) {
+ case "PUT":
+ requestBuilder.put(body);
+ break;
+ case "POST":
+ requestBuilder.post(body);
+ break;
+ case "PATCH":
+ requestBuilder.patch(body);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported HTTP method: " + method);
+ }
+
+ okhttp3.Response response = client.newCall(requestBuilder.build()).execute();
+ String responseBody = response.body() != null ? response.body().string() : "";
+ logger.info("Response code: " + response.code());
+ logger.info("Response body: " + responseBody);
+
+ if (!response.isSuccessful()) {
+ throw new RuntimeException("HTTP " + response.code() + ": " + responseBody);
+ }
+ return responseBody;
+ }
+
+ /**
+ * Updates the parameter values for a specific set (row) in a TDP.
+ * Uses PATCH to merge updated data into the existing TDP.
+ * The PATCH endpoint matches rows by name and updates them.
+ *
+ * @param tdpId The TDP ID
+ * @param setName The name of the set/row to update
+ * @param updatedData A map of parameter names to their new values
+ * @param apiKey The Bearer token for authentication
+ * @param logger Logger instance
+ * @return The API response as a string
+ * @throws Exception if the request or parsing fails
+ */
+ public static String updateTDPIterationData(String tdpId, String setName,
+ Map updatedData,
+ String apiKey, Logger logger) throws Exception {
+ String url = "https://app.testsigma.com/api/v1/test_data/" + tdpId;
+ logger.info("Updating TDP " + tdpId + " set '" + setName + "' with data: " + updatedData);
+
+ ObjectNode dataObj = objectMapper.createObjectNode();
+ for (Map.Entry entry : updatedData.entrySet()) {
+ dataObj.put(entry.getKey(), entry.getValue());
+ }
+
+ ObjectNode setObj = objectMapper.createObjectNode();
+ setObj.put("name", setName);
+ setObj.set("data", dataObj);
+
+ ArrayNode dataArray = objectMapper.createArrayNode();
+ dataArray.add(setObj);
+
+ ObjectNode requestBody = objectMapper.createObjectNode();
+ requestBody.set("data", dataArray);
+
+ return makeHttpRequestWithBody(url, "PATCH", objectMapper.writeValueAsString(requestBody), apiKey, logger);
+ }
+
+ /**
+ * Adds a new row (set) to an existing TDP.
+ * Fetches the current TDP, appends the new row, and PUTs the full data back.
+ * This avoids the PATCH endpoint's limitation where mergeDataSet is bounded by
+ * min(existingRows, requestRows), making it unreliable for adding rows.
+ *
+ * @param tdpId The TDP ID
+ * @param rowName The name for the new row/set (e.g., "Set6")
+ * @param rowData A map of parameter names to their values for the new row
+ * @param apiKey The Bearer token for authentication
+ * @param logger Logger instance
+ * @return The API response as a string
+ * @throws Exception if the request or parsing fails
+ */
+ public static String addTDPRow(String tdpId, String rowName, Map rowData,
+ String apiKey, Logger logger) throws Exception {
+ String url = "https://app.testsigma.com/api/v1/test_data/" + tdpId;
+ logger.info("Adding new row '" + rowName + "' to TDP " + tdpId);
+
+ String existingResponse = makeHttpRequest2(url, apiKey, logger);
+ JsonNode existing = objectMapper.readTree(existingResponse);
+
+ JsonNode existingDataNode = existing.get("data");
+ if (existingDataNode == null || !existingDataNode.isArray()) {
+ throw new RuntimeException("No data array found in existing TDP response");
+ }
+ ArrayNode existingData = (ArrayNode) existingDataNode;
+
+ ObjectNode newRowDataNode = objectMapper.createObjectNode();
+ for (Map.Entry entry : rowData.entrySet()) {
+ newRowDataNode.put(entry.getKey(), entry.getValue());
+ }
+
+ ObjectNode newSet = objectMapper.createObjectNode();
+ newSet.put("name", rowName);
+ newSet.put("expectedToFail", false);
+ newSet.put("position", existingData.size());
+ newSet.set("data", newRowDataNode);
+
+ existingData.add(newSet);
+
+ ObjectNode requestBody = objectMapper.createObjectNode();
+ requestBody.put("testDataName", existing.get("testDataName").asText());
+ requestBody.set("data", existingData);
+
+ return makeHttpRequestWithBody(url, "PUT", objectMapper.writeValueAsString(requestBody), apiKey, logger);
+ }
+
+ /**
+ * Adds a new row with empty values for all existing parameters.
+ * Reads column names from the first existing row and sets them all to empty strings.
+ *
+ * @param tdpId The TDP ID
+ * @param rowName The name for the new row/set
+ * @param apiKey The Bearer token for authentication
+ * @param logger Logger instance
+ * @return The API response as a string
+ * @throws Exception if the request or parsing fails
+ */
+ public static String addTDPRowWithEmptyData(String tdpId, String rowName,
+ String apiKey, Logger logger) throws Exception {
String url = "https://app.testsigma.com/api/v1/test_data/" + tdpId;
- String responseBody = makeHttpRequest(url, apiKey);
- return parseTDPResponse(responseBody, iterationName);
+ logger.info("Adding new row '" + rowName + "' with empty values to TDP " + tdpId);
+
+ String existingResponse = makeHttpRequest2(url, apiKey, logger);
+ JsonNode existing = objectMapper.readTree(existingResponse);
+
+ JsonNode existingDataNode = existing.get("data");
+ if (existingDataNode == null || !existingDataNode.isArray() || existingDataNode.size() == 0) {
+ throw new RuntimeException("No existing data/rows found in TDP to derive column names");
+ }
+ ArrayNode existingData = (ArrayNode) existingDataNode;
+
+ ObjectNode newRowDataNode = objectMapper.createObjectNode();
+ JsonNode firstRowData = existingData.get(0).get("data");
+ if (firstRowData != null && firstRowData.isObject()) {
+ firstRowData.fieldNames().forEachRemaining(column -> newRowDataNode.put(column, ""));
+ }
+ logger.info("Created empty row with columns: " + newRowDataNode.fieldNames());
+
+ ObjectNode newSet = objectMapper.createObjectNode();
+ newSet.put("name", rowName);
+ newSet.put("expectedToFail", false);
+ newSet.put("position", existingData.size());
+ newSet.set("data", newRowDataNode);
+
+ existingData.add(newSet);
+
+ ObjectNode requestBody = objectMapper.createObjectNode();
+ requestBody.put("testDataName", existing.get("testDataName").asText());
+ requestBody.set("data", existingData);
+
+ return makeHttpRequestWithBody(url, "PUT", objectMapper.writeValueAsString(requestBody), apiKey, logger);
}
+
+ /**
+ * Adds a new column (parameter) to an existing TDP.
+ * Fetches the current TDP, adds the new column with the given default value
+ * to every existing row, and PUTs the full data back.
+ *
+ * @param tdpId The TDP ID
+ * @param columnName The name of the new column/parameter
+ * @param defaultValue The default value to set for all existing rows
+ * @param apiKey The Bearer token for authentication
+ * @param logger Logger instance
+ * @return The API response as a string
+ * @throws Exception if the request or parsing fails
+ */
+ public static String addTDPColumn(String tdpId, String columnName, String defaultValue,
+ String apiKey, Logger logger) throws Exception {
+ String url = "https://app.testsigma.com/api/v1/test_data/" + tdpId;
+ logger.info("Adding new column '" + columnName + "' with default value '" + defaultValue + "' to TDP " + tdpId);
+
+ String existingResponse = makeHttpRequest2(url, apiKey, logger);
+ JsonNode existing = objectMapper.readTree(existingResponse);
+
+ JsonNode existingDataNode = existing.get("data");
+ if (existingDataNode == null || !existingDataNode.isArray()) {
+ throw new RuntimeException("No data array found in existing TDP response");
+ }
+ ArrayNode existingData = (ArrayNode) existingDataNode;
+
+ for (JsonNode row : existingData) {
+ JsonNode rowDataNode = row.get("data");
+ if (rowDataNode != null && rowDataNode.isObject()) {
+ ((ObjectNode) rowDataNode).put(columnName, defaultValue);
+ }
+ }
+
+ ObjectNode requestBody = objectMapper.createObjectNode();
+ requestBody.put("testDataName", existing.get("testDataName").asText());
+ requestBody.set("data", existingData);
+
+ return makeHttpRequestWithBody(url, "PUT", objectMapper.writeValueAsString(requestBody), apiKey, logger);
+ }
+
}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/AddColumnToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/AddColumnToTDP.java
new file mode 100644
index 00000000..7ad93526
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/AddColumnToTDP.java
@@ -0,0 +1,62 @@
+package com.testsigma.addons.web;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+@Action(actionText = "add new column column-name with default value default-value to TDP tdp-id" +
+ " using the apikey api-key",
+ description = "Adds a new parameter/column to an existing TDP. The new column is added" +
+ " to every existing row with the specified default value. Uses PUT to fetch" +
+ " existing data, add the column to all rows, and replace the full TDP data.",
+ applicationType = ApplicationType.WEB,
+ useCustomScreenshot = false)
+public class AddColumnToTDP extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+
+ @TestData(reference = "column-name")
+ private com.testsigma.sdk.TestData columnName;
+
+ @TestData(reference = "default-value")
+ private com.testsigma.sdk.TestData defaultValue;
+
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddColumnToTDP execution");
+
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String colName = columnName.getValue().toString().trim();
+ String defValue = defaultValue.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+
+ logger.info("TDP ID: " + tdpIdStr + ", Column: " + colName + ", Default Value: " + defValue);
+
+ if (colName.isEmpty()) {
+ setErrorMessage("Column name cannot be empty");
+ return Result.FAILED;
+ }
+
+ try {
+ String response = TDPApiUtil.addTDPColumn(tdpIdStr, colName, defValue, apiKeyStr, logger);
+
+ logger.info("New column added to TDP successfully");
+ setSuccessMessage("Successfully added new column " + colName
+ + " with default value " + defValue + " to all rows in TDP");
+ return Result.SUCCESS;
+
+ } catch (Exception e) {
+ logger.info("Error occurred while adding column to TDP: " + e.getMessage());
+ setErrorMessage("Failed to add column to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/AddNewRowToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/AddNewRowToTDP.java
new file mode 100644
index 00000000..22fd9cc2
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/AddNewRowToTDP.java
@@ -0,0 +1,43 @@
+package com.testsigma.addons.web;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+@Action(actionText = "add new row row-name to TDP tdp-id using the apikey api-key",
+ description = "Adds a new row/set to an existing TDP with empty values for all existing parameters." +
+ " Uses PUT to fetch existing data, append the new row with empty values, and replace the full TDP data.",
+ applicationType = ApplicationType.WEB,
+ useCustomScreenshot = false)
+public class AddNewRowToTDP extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "row-name")
+ private com.testsigma.sdk.TestData rowName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating AddNewRowToTDP execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String rowNameStr = rowName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ logger.info("TDP ID: " + tdpIdStr + ", Row Name: " + rowNameStr);
+ try {
+ TDPApiUtil.addTDPRowWithEmptyData(tdpIdStr, rowNameStr, apiKeyStr, logger);
+ logger.info("New row added to TDP successfully");
+ setSuccessMessage("Successfully added new row " + rowNameStr + " to TDP with empty parameter values");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ logger.info("Error occurred while adding new row to TDP: " + e.getMessage());
+ setErrorMessage("Failed to add new row to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetEntireRowFromTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetEntireRowFromTDP.java
index 78a91f18..8bdaeda5 100644
--- a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetEntireRowFromTDP.java
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetEntireRowFromTDP.java
@@ -43,7 +43,7 @@ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
String apiKey = testData3.getValue().toString();
// Use the utility class to get TDP iteration data
- Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey);
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
// Log the retrieved parameter values
parameterValues.forEach((key, value) ->
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetTDPColumncount.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetTDPColumncount.java
index 1e68fb46..a3218f9c 100644
--- a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetTDPColumncount.java
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetTDPColumncount.java
@@ -36,7 +36,7 @@ public com.testsigma.sdk.Result execute() {
String setName = testData2.getValue().toString();
String apiKey = testData3.getValue().toString();
logger.info("TDP ID: "+ tdpId +", Set Name: "+ setName +", API Key: "+ apiKey);
- Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey);
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
logger.info("Parameter values: " + parameterValues);
int totalColumnCount = parameterValues.entrySet().size();
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetTDPValue.java
new file mode 100644
index 00000000..abe49dda
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/GetTDPValue.java
@@ -0,0 +1,61 @@
+package com.testsigma.addons.web;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.Map;
+
+@Action(actionText = "get TDP tdp-id value for set name set-name and parameter parameter-name" +
+ " using the apikey api-key and store in variable runtime-variable",
+ description = "Gets the value of a specific parameter/column for a given set name in the TDP" +
+ " and stores it in a runtime variable.",
+ applicationType = ApplicationType.WEB,
+ useCustomScreenshot = false)
+public class GetTDPValue extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData runtimeVariable;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating GetTDPValue execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ logger.info("TDP ID: " + tdpIdStr + ", Set Name: " + setNameStr + ", Parameter: " + paramName);
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpIdStr, setNameStr, apiKeyStr, logger);
+ if (!parameterValues.containsKey(paramName)) {
+ setErrorMessage("Parameter " + paramName + " not found in set " + setNameStr + ". Available parameters: " + parameterValues.keySet());
+ return Result.FAILED;
+ }
+ String value = parameterValues.get(paramName);
+ runTimeData.setKey(runtimeVariable.getValue().toString());
+ runTimeData.setValue(value);
+ logger.info("Retrieved value: " + value);
+ setSuccessMessage("Successfully retrieved parameter " + paramName + " = " + value + " from set " + setNameStr + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ logger.info("Error occurred while getting TDP value: " + e.getMessage());
+ setErrorMessage("Failed to get TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/StoreNextColumnTdpValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/StoreNextColumnTdpValue.java
index 3d5b84b3..4128fb4a 100644
--- a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/StoreNextColumnTdpValue.java
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/StoreNextColumnTdpValue.java
@@ -28,9 +28,10 @@ public class StoreNextColumnTdpValue extends WebAction {
@TestData(reference = "api-key")
private com.testsigma.sdk.TestData testData3;
@TestData(reference = "column-name", isRuntimeVariable = true)
- private com.testsigma.sdk.TestData testData4;
+ private com.testsigma.sdk.TestData columnNameTestData;
+
@TestData(reference = "column-value", isRuntimeVariable = true)
- private com.testsigma.sdk.TestData testData6;
+ private com.testsigma.sdk.TestData columnValueTestData;
@TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
private com.testsigma.sdk.TestData testData5;
@TestCaseResult
@@ -51,13 +52,13 @@ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
String apiKey = testData3.getValue().toString();
logger.debug("TDP ID: " + tdpId + ", Set Name: " + setName + ", API Key: " + apiKey);
// use api util to get the next column value
- Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey);
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
// get the iterator value
try {
int iteratorValue = Integer.parseInt(testData5.getValue().toString());
logger.info("Iterator value: " + iteratorValue);
- ArrayList resultVariableForStoringOutput = new ArrayList<>();
+ ArrayList columnValuesList = new ArrayList<>();
ArrayList columnNamesList = new ArrayList<>();
// Loop through the parameters/columns in the parameterValues map
for (Map.Entry entry : parameterValues.entrySet()) {
@@ -67,29 +68,29 @@ public com.testsigma.sdk.Result execute() throws NoSuchElementException {
continue;
} else {
logger.info("Adding column value to list: " + entry.getValue());
- resultVariableForStoringOutput.add(entry.getValue());
+ columnValuesList.add(entry.getValue());
columnNamesList.add(key);
}
}
- logger.info("Total columns available after skipping first three columns: " + resultVariableForStoringOutput.size());
- if (iteratorValue > resultVariableForStoringOutput.size() -1) {
- logger.info("Iterator index " + iteratorValue + " exceeds available columns " + resultVariableForStoringOutput.size());
- setErrorMessage("Iterator index " + iteratorValue + " exceeds available columns " + resultVariableForStoringOutput.size());
+ logger.info("Total columns available after skipping first three columns: " + columnValuesList.size());
+ if (iteratorValue > columnValuesList.size() - 1) {
+ logger.info("Iterator index " + iteratorValue + " exceeds available columns " + columnValuesList.size());
+ setErrorMessage("Iterator index " + iteratorValue + " exceeds available columns " + columnValuesList.size());
return com.testsigma.sdk.Result.FAILED;
}
logger.info("Storing column value at index " + iteratorValue + " to runtime variable = "
- + resultVariableForStoringOutput.get(iteratorValue));
- runTimeData.setValue(resultVariableForStoringOutput.get(iteratorValue));
- runTimeData.setKey(testData4.getValue().toString());
+ + columnValuesList.get(iteratorValue));
+ runTimeData.setValue(columnValuesList.get(iteratorValue));
+ runTimeData.setKey(columnValueTestData.getValue().toString());
// store the key value of result variable
columnNameRuntimeData.setValue(columnNamesList.get(iteratorValue));
- columnNameRuntimeData.setKey(testData6.getValue().toString());
+ columnNameRuntimeData.setKey(columnNameTestData.getValue().toString());
logger.info("Stored column name in runtime variable: " + columnNamesList.get(iteratorValue));
- logger.info("Stored next column value in runtime variable: " + resultVariableForStoringOutput.get(iteratorValue));
+ logger.info("Stored next column value in runtime variable: " + columnValuesList.get(iteratorValue));
- setSuccessMessage("Successfully retrieved and stored next column data i.e " + resultVariableForStoringOutput.get(iteratorValue) +
+ setSuccessMessage("Successfully retrieved and stored next column data i.e " + columnValuesList.get(iteratorValue) +
" for set name: " + setName + "");
// updating the iterator value for next iteration...
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/UpdateTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/UpdateTDPValue.java
new file mode 100644
index 00000000..4e890fae
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/web/UpdateTDPValue.java
@@ -0,0 +1,68 @@
+package com.testsigma.addons.web;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.WebAction;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import org.openqa.selenium.NoSuchElementException;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Action(actionText = "update TDP tdp-id set name set-name parameter parameter-name with value parameter-value" +
+ " using the apikey api-key",
+ description = "Updates the value of a specific parameter/column for a given set name in the TDP." +
+ " Uses the PATCH endpoint which matches rows by name and merges the updated data.",
+ applicationType = ApplicationType.WEB,
+ useCustomScreenshot = false)
+public class UpdateTDPValue extends WebAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+
+ @TestData(reference = "parameter-value")
+ private com.testsigma.sdk.TestData parameterValue;
+
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ public Result execute() throws NoSuchElementException {
+ logger.info("Initiating UpdateTDPValue execution");
+
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String paramValue = parameterValue.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+
+ logger.info("TDP ID: " + tdpIdStr + ", Set Name: " + setNameStr
+ + ", Parameter: " + paramName + ", Value: " + paramValue);
+
+ try {
+ Map updatedData = new LinkedHashMap<>();
+ updatedData.put(paramName, paramValue);
+
+ String response = TDPApiUtil.updateTDPIterationData(
+ tdpIdStr, setNameStr, updatedData, apiKeyStr, logger);
+
+ logger.info("TDP update successful");
+ setSuccessMessage("Successfully updated parameter " + paramName
+ + " to " + paramValue + " in set " + setNameStr + "");
+ return Result.SUCCESS;
+
+ } catch (Exception e) {
+ logger.info("Error occurred while updating TDP value: " + e.getMessage());
+ setErrorMessage("Failed to update TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/AddColumnToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/AddColumnToTDP.java
new file mode 100644
index 00000000..8cc08102
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/AddColumnToTDP.java
@@ -0,0 +1,44 @@
+package com.testsigma.addons.windowsadvanced;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WindowsAdvancedAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+
+@Action(actionText = "add new column column-name with default value default-value to TDP tdp-id" +
+ " using the apikey api-key",
+ description = "Adds a new parameter/column to an existing TDP with the specified default value for all rows.",
+ applicationType = ApplicationType.WINDOWS_ADVANCED,
+ displayName = "Add new column to TDP using tdp id, column name and default value",
+ useCustomScreenshot = false)
+public class AddColumnToTDP extends WindowsAdvancedAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "column-name")
+ private com.testsigma.sdk.TestData columnName;
+ @TestData(reference = "default-value")
+ private com.testsigma.sdk.TestData defaultValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ protected Result execute() {
+ logger.info("Initiating AddColumnToTDP execution");
+ String colName = columnName.getValue().toString().trim();
+ if (colName.isEmpty()) {
+ setErrorMessage("Column name cannot be empty");
+ return Result.FAILED;
+ }
+ try {
+ TDPApiUtil.addTDPColumn(tdpId.getValue().toString().trim(), colName, defaultValue.getValue().toString().trim(), apiKey.getValue().toString().trim(), logger);
+ setSuccessMessage("Successfully added new column " + colName + " with default value " + defaultValue.getValue() + " to all rows in TDP");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add column to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/AddNewRowToTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/AddNewRowToTDP.java
new file mode 100644
index 00000000..c21a4ff9
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/AddNewRowToTDP.java
@@ -0,0 +1,39 @@
+package com.testsigma.addons.windowsadvanced;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WindowsAdvancedAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+
+@Action(actionText = "add new row row-name to TDP tdp-id using the apikey api-key",
+ description = "Adds a new row/set to an existing TDP with empty values for all existing parameters.",
+ applicationType = ApplicationType.WINDOWS_ADVANCED,
+ displayName = "Add new row to TDP with empty values",
+ useCustomScreenshot = false)
+public class AddNewRowToTDP extends WindowsAdvancedAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "row-name")
+ private com.testsigma.sdk.TestData rowName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ protected Result execute() {
+ logger.info("Initiating AddNewRowToTDP execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String rowNameStr = rowName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ TDPApiUtil.addTDPRowWithEmptyData(tdpIdStr, rowNameStr, apiKeyStr, logger);
+ setSuccessMessage("Successfully added new row " + rowNameStr + " to TDP with empty parameter values");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to add new row to TDP: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetEntireRowFromTDP.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetEntireRowFromTDP.java
new file mode 100644
index 00000000..a29ede0d
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetEntireRowFromTDP.java
@@ -0,0 +1,50 @@
+package com.testsigma.addons.windowsadvanced;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WindowsAdvancedAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Map;
+
+@Action(actionText = "get entire row from TDP tdp-id for the set name set-name using the apikey api-key and" +
+ " store data in the run time variable runtime-variable",
+ description = "Get entire row from TDP",
+ applicationType = ApplicationType.WINDOWS_ADVANCED,
+ displayName = "Get entire row from TDP",
+ useCustomScreenshot = false)
+public class GetEntireRowFromTDP extends WindowsAdvancedAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ protected com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(testData1.getValue().toString(), testData2.getValue().toString(), testData3.getValue().toString(), logger);
+ String resultVariable = "";
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ if (entry.getKey().equals("S.No.") || entry.getKey().equals("ETF") || entry.getKey().equals("Set Name")) continue;
+ resultVariable += entry.getValue() + ", ";
+ }
+ resultVariable = resultVariable.substring(0, resultVariable.length() - 2);
+ runTimeData.setValue(resultVariable);
+ runTimeData.setKey(testData4.getValue().toString());
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetTDPColumncount.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetTDPColumncount.java
new file mode 100644
index 00000000..a623bb54
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetTDPColumncount.java
@@ -0,0 +1,45 @@
+package com.testsigma.addons.windowsadvanced;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WindowsAdvancedAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Map;
+
+@Action(actionText = "store total column count of TDP tdp-id for the set name set-name using the apikey" +
+ " api-key into variable column-count-variable",
+ description = "Get total column count of TDP",
+ applicationType = ApplicationType.WINDOWS_ADVANCED,
+ displayName = "Get TDP column count",
+ useCustomScreenshot = false)
+public class GetTDPColumncount extends WindowsAdvancedAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-count-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData4;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ protected com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(testData1.getValue().toString(), testData2.getValue().toString(), testData3.getValue().toString(), logger);
+ int totalColumnCount = parameterValues.size();
+ runTimeData.setKey(testData4.getValue().toString());
+ runTimeData.setValue(String.valueOf(totalColumnCount));
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting total column count: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetTDPValue.java
new file mode 100644
index 00000000..513db6f5
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/GetTDPValue.java
@@ -0,0 +1,58 @@
+package com.testsigma.addons.windowsadvanced;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WindowsAdvancedAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestData;
+
+import java.util.Map;
+
+@Action(actionText = "get TDP tdp-id value for set name set-name and parameter parameter-name" +
+ " using the apikey api-key and store in variable runtime-variable",
+ description = "Gets the value of a specific parameter/column for a given set name in the TDP" +
+ " and stores it in a runtime variable.",
+ applicationType = ApplicationType.WINDOWS_ADVANCED,
+ displayName = "Get TDP parameter value for a set",
+ useCustomScreenshot = false)
+public class GetTDPValue extends WindowsAdvancedAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+ @TestData(reference = "runtime-variable", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData runtimeVariable;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ protected Result execute() {
+ logger.info("Initiating GetTDPValue execution");
+ String tdpIdStr = tdpId.getValue().toString().trim();
+ String setNameStr = setName.getValue().toString().trim();
+ String paramName = parameterName.getValue().toString().trim();
+ String apiKeyStr = apiKey.getValue().toString().trim();
+ try {
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpIdStr, setNameStr, apiKeyStr, logger);
+ if (!parameterValues.containsKey(paramName)) {
+ setErrorMessage("Parameter " + paramName + " not found in set " + setNameStr + ". Available parameters: " + parameterValues.keySet());
+ return Result.FAILED;
+ }
+ String value = parameterValues.get(paramName);
+ runTimeData.setKey(runtimeVariable.getValue().toString());
+ runTimeData.setValue(value);
+ setSuccessMessage("Successfully retrieved parameter " + paramName + " = " + value + " from set " + setNameStr + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to get TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/SetTDpIteratorToZero.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/SetTDpIteratorToZero.java
new file mode 100644
index 00000000..19943c26
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/SetTDpIteratorToZero.java
@@ -0,0 +1,40 @@
+package com.testsigma.addons.windowsadvanced;
+
+import com.testsigma.sdk.WindowsAdvancedAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+
+import java.util.Objects;
+
+@Action(actionText = "set TDP iterator TDP_ITERATOR_KEY_NAME value to 0",
+ description = "Set TDP iterator TDP_ITERATOR_KEY_NAME to 0",
+ applicationType = ApplicationType.WINDOWS_ADVANCED,
+ displayName = "Set TDP iterator to zero",
+ useCustomScreenshot = false)
+public class SetTDpIteratorToZero extends WindowsAdvancedAction {
+
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData1;
+ @RunTimeData
+ private com.testsigma.sdk.RunTimeData runTimeData;
+
+ @Override
+ protected com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ if (!Objects.equals(testData1.getValue().toString(), "TDP_ITERATOR_KEY_NAME")) {
+ setErrorMessage("Don't change the TDP_ITERATOR_KEY_NAME variable name");
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ try {
+ runTimeData.setValue("0");
+ runTimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ setSuccessMessage("Set TDP iterator TDP_ITERATOR_KEY_NAME to 0");
+ return com.testsigma.sdk.Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while setting runtime variable to 0: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/StoreNextColumnTdpValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/StoreNextColumnTdpValue.java
new file mode 100644
index 00000000..9ca89797
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/StoreNextColumnTdpValue.java
@@ -0,0 +1,87 @@
+package com.testsigma.addons.windowsadvanced;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WindowsAdvancedAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+import com.testsigma.sdk.annotation.RunTimeData;
+import com.testsigma.sdk.annotation.TestCaseResult;
+
+import java.util.Map;
+import java.util.ArrayList;
+
+@Action(actionText = "store next column name and value from TDP tdp-id for the set name set-name using" +
+ " the apikey api-key and iterator TDP_ITERATOR_KEY_NAME in the runtime variables column-name and column-value",
+ description = "Store next column name and value from TDP for the given set name using iterator",
+ applicationType = ApplicationType.WINDOWS_ADVANCED,
+ displayName = "Store next TDP column name and value",
+ useCustomScreenshot = false)
+public class StoreNextColumnTdpValue extends WindowsAdvancedAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData testData1;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData testData2;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData testData3;
+ @TestData(reference = "column-name", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnNameTestData;
+ @TestData(reference = "column-value", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData columnValueTestData;
+ @TestData(reference = "TDP_ITERATOR_KEY_NAME", isRuntimeVariable = true)
+ private com.testsigma.sdk.TestData testData5;
+ @TestCaseResult
+ private com.testsigma.sdk.TestCaseResult testCaseResult;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData runTimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData iteratorRuntimeData;
+ @RunTimeData
+ private static com.testsigma.sdk.RunTimeData columnNameRuntimeData;
+
+ @Override
+ protected com.testsigma.sdk.Result execute() {
+ logger.info("Initiating execution");
+ try {
+ String tdpId = testData1.getValue().toString();
+ String setName = testData2.getValue().toString();
+ String apiKey = testData3.getValue().toString();
+ Map parameterValues = TDPApiUtil.getTDPIterationData(tdpId, setName, apiKey, logger);
+ try {
+ int iteratorValue = Integer.parseInt(testData5.getValue().toString());
+ ArrayList columnValuesList = new ArrayList<>();
+ ArrayList columnNamesList = new ArrayList<>();
+ for (Map.Entry entry : parameterValues.entrySet()) {
+ String key = entry.getKey();
+ if (key.equals("S.No.") || key.equals("ETF") || key.equals("Set Name")) continue;
+ columnValuesList.add(entry.getValue());
+ columnNamesList.add(key);
+ }
+ if (iteratorValue > columnValuesList.size() - 1) {
+ setErrorMessage("Iterator index " + iteratorValue + " exceeds available columns " + columnValuesList.size());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ runTimeData.setValue(columnValuesList.get(iteratorValue));
+ runTimeData.setKey(columnValueTestData.getValue().toString());
+ columnNameRuntimeData.setValue(columnNamesList.get(iteratorValue));
+ columnNameRuntimeData.setKey(columnNameTestData.getValue().toString());
+ setSuccessMessage("Successfully retrieved and stored next column data i.e " + columnValuesList.get(iteratorValue) +
+ " for set name: " + setName + "");
+ iteratorValue++;
+ iteratorRuntimeData.setValue(String.valueOf(iteratorValue));
+ iteratorRuntimeData.setKey("TDP_ITERATOR_KEY_NAME");
+ } catch (NumberFormatException e) {
+ setErrorMessage("Error occurred while parsing iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while getting iterator value: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ } catch (Exception e) {
+ setErrorMessage("Error occurred while processing TDP data: " + e.getMessage());
+ return com.testsigma.sdk.Result.FAILED;
+ }
+ return com.testsigma.sdk.Result.SUCCESS;
+ }
+}
diff --git a/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/UpdateTDPValue.java b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/UpdateTDPValue.java
new file mode 100644
index 00000000..590dc00c
--- /dev/null
+++ b/iterating_through_columns_in_tdps/src/main/java/com/testsigma/addons/windowsadvanced/UpdateTDPValue.java
@@ -0,0 +1,46 @@
+package com.testsigma.addons.windowsadvanced;
+
+import com.testsigma.addons.util.TDPApiUtil;
+import com.testsigma.sdk.WindowsAdvancedAction;
+import com.testsigma.sdk.ApplicationType;
+import com.testsigma.sdk.Result;
+import com.testsigma.sdk.annotation.Action;
+import com.testsigma.sdk.annotation.TestData;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Action(actionText = "update TDP tdp-id set name set-name parameter parameter-name with value parameter-value" +
+ " using the apikey api-key",
+ description = "Updates the value of a specific parameter/column for a given set name in the TDP.",
+ applicationType = ApplicationType.WINDOWS_ADVANCED,
+ displayName = "Update TDP parameter value for given set name using tdp id, set name, parameter name and parameter value",
+ useCustomScreenshot = false)
+public class UpdateTDPValue extends WindowsAdvancedAction {
+
+ @TestData(reference = "tdp-id")
+ private com.testsigma.sdk.TestData tdpId;
+ @TestData(reference = "set-name")
+ private com.testsigma.sdk.TestData setName;
+ @TestData(reference = "parameter-name")
+ private com.testsigma.sdk.TestData parameterName;
+ @TestData(reference = "parameter-value")
+ private com.testsigma.sdk.TestData parameterValue;
+ @TestData(reference = "api-key")
+ private com.testsigma.sdk.TestData apiKey;
+
+ @Override
+ protected Result execute() {
+ logger.info("Initiating UpdateTDPValue execution");
+ try {
+ Map updatedData = new LinkedHashMap<>();
+ updatedData.put(parameterName.getValue().toString().trim(), parameterValue.getValue().toString().trim());
+ TDPApiUtil.updateTDPIterationData(tdpId.getValue().toString().trim(), setName.getValue().toString().trim(), updatedData, apiKey.getValue().toString().trim(), logger);
+ setSuccessMessage("Successfully updated parameter " + parameterName.getValue() + " to " + parameterValue.getValue() + " in set " + setName.getValue() + "");
+ return Result.SUCCESS;
+ } catch (Exception e) {
+ setErrorMessage("Failed to update TDP value: " + e.getMessage());
+ return Result.FAILED;
+ }
+ }
+}