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; + } + } +}