diff --git a/src/main/java/io/cdap/e2e/pages/actions/CdfHubActions.java b/src/main/java/io/cdap/e2e/pages/actions/CdfHubActions.java new file mode 100644 index 000000000..62dc83feb --- /dev/null +++ b/src/main/java/io/cdap/e2e/pages/actions/CdfHubActions.java @@ -0,0 +1,182 @@ +/* + * Copyright © 2023 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package io.cdap.e2e.pages.actions; + +import io.cdap.e2e.pages.locators.CdfHubLocators; +import io.cdap.e2e.utils.AssertionHelper; +import io.cdap.e2e.utils.ElementHelper; +import io.cdap.e2e.utils.PluginPropertyUtils; +import io.cdap.e2e.utils.SeleniumHelper; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * CDF hub related actions. + */ +public class CdfHubActions { + + private static final Logger logger = LoggerFactory.getLogger(CdfHubActions.class); + static { + SeleniumHelper.getPropertiesLocators(CdfHubLocators.class); + } + + /** + * Click on Hub option from the top panel. + */ + public static void clickOnHub() { + ElementHelper.clickOnElement(CdfHubLocators.hubPage); + } + + /** + * Click on differnt options from the hub. + * @param option Plugins pipelines Drivers etc. + */ + public static void clickOnOptionsFromHub(String option) { + ElementHelper.clickOnElement(CdfHubLocators.locateArtifact(option)); + } + + /** + * Click on the different buttons in hub or studio. + */ + public static void clickOnButton(String buttonName) { + ElementHelper.clickOnElement(CdfHubLocators.locateButton(buttonName)); + } + + /** + * Verify that the pipeline is saved in drafts. + */ + public static void verifyPipelineStatus(String pipelineName) { + ElementHelper.isElementDisplayed(CdfHubLocators.locateButton(pipelineName)); + } + + /** + * Click on Deploy button to deploy the plugin Or create the pipeline. + */ + public static void clickOnDeploy() { + ElementHelper.clickOnElement(CdfHubLocators.deployButton); + } + + /** + * Click on Finish button to deploy the plugin Or create the pipeline. + */ + public static void clickOnFinish() { + ElementHelper.clickOnElement(CdfHubLocators.finishButton); + } + + /** + * Click on the different options from hub from the left panel . + */ + public static void clickOnOptions(String option) { + ElementHelper.clickOnElement(CdfHubLocators.locateOptions(option)); + } + + /** + * Click on Close button to close the hub page . + */ + public static void clickOnCloseButton() { + ElementHelper.clickOnElement(CdfHubLocators.closeButton); + } + + /** + * Click on Search tab in hub to search for artifacts or pipelines. + */ + public static void clickOnSearchTab(String searchedText) { + ElementHelper.sendKeys(CdfHubLocators.searchTabHub, searchedText); + } + + /** + * To verify the error message from the hub page . + */ + public static void verifyErrorMessage(String errorMessageLocation) { + String expectedErrorMessage = PluginPropertyUtils.errorProp(errorMessageLocation); + AssertionHelper.verifyElementContainsText(CdfHubLocators. + locateErrorMessage(expectedErrorMessage), expectedErrorMessage); + } + + /** + To verify whether the element is displayed or not . + */ + public static void verifyElementIsDisplayed() { + ElementHelper.isElementDisplayed(CdfHubLocators.locateHub); + } + + /** + To verify the plugin is deleted from the control center. + */ + public static void verifyPluginIsDeleted() { + ElementHelper.isElementDisplayed(CdfHubLocators.deletedElementStatus); + } + + /** + * Click on Delete button to delete the plugin from control center. + */ + public static void clickOnDeleteButton() { + ElementHelper.clickOnElement(CdfHubLocators.deleteButton); + } + + /** + * To delete the plugin in control center. + */ + public static void deletePluginControlCenter() { + ElementHelper.clickOnElement(CdfHubLocators.deleteIconControlCenter); + clickOnDeleteButton(); + } + + /** + * To verify whether the plugin is successfully deployed. + */ + public static void verifyPluginIsDeployed(String pluginName) { + String pluginPropertyDataCyAttribute = PluginPropertyUtils.getPluginPropertyDataCyAttribute(pluginName); + if (pluginPropertyDataCyAttribute == null) { + pluginPropertyDataCyAttribute = pluginName; + } + ElementHelper.isElementDisplayed(CdfHubLocators.locateArtifact(pluginPropertyDataCyAttribute)); + } + + /** + * Click on the different options from the hamburger menu . + * @param option Home List Studio Wrangler Replication Metadata etc. + */ + public static void clickOnOptionFromHamburgerMenu(String option) { + String pluginPropertyDataCyAttribute = PluginPropertyUtils.getPluginPropertyDataCyAttribute(option); + if (pluginPropertyDataCyAttribute == null) { + pluginPropertyDataCyAttribute = option; + } + ElementHelper.clickOnElement(CdfHubLocators.locateHamburgerOption(pluginPropertyDataCyAttribute)); + } + + /** + * Click on Create button to create a pipeline from hub . + */ + public static void clickOnCreateButton() { + ElementHelper.clickOnElement(CdfHubLocators.createButton); + } + + /** + * To verify whether the plugin is present in studio. + */ + public static void verifyPluginInStudio(String pluginName) { + ElementHelper.isElementDisplayed(CdfHubLocators.locateArtifact(pluginName)); + } + + /** + * To verify whether the plugin is displayed on the Hub page. + */ + public static void verifyPluginIsDisplayed(String pluginName) { + ElementHelper.isElementDisplayed(CdfHubLocators.locateArtifact(pluginName)); + } +} diff --git a/src/main/java/io/cdap/e2e/pages/locators/CdfHubLocators.java b/src/main/java/io/cdap/e2e/pages/locators/CdfHubLocators.java new file mode 100644 index 000000000..04baca61d --- /dev/null +++ b/src/main/java/io/cdap/e2e/pages/locators/CdfHubLocators.java @@ -0,0 +1,72 @@ +/* + * Copyright © 2023 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package io.cdap.e2e.pages.locators; + +import io.cdap.e2e.utils.SeleniumDriver; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.How; + +/** + * CDF hub related locators. + */ +public class CdfHubLocators { + + @FindBy(how = How.XPATH, using = "//input[@placeholder='Search by name']") + public static WebElement searchTabHub; + @FindBy(how = How.XPATH, using = "//*[@data-cy='hub-close-btn']") + public static WebElement closeButton; + @FindBy(how = How.XPATH, using = "//button[@data-cy='one_step_deploy_plugin-btn']") + public static WebElement deployButton; + @FindBy(how = How.XPATH, using = "//button[@data-cy='create_pipeline_draft-btn']") + public static WebElement createButton; + @FindBy(how = How.XPATH, using = "//button[@data-cy='wizard-finish-btn']") + public static WebElement finishButton; + @FindBy(how = How.XPATH, using = "//span[contains(text(),'Hub')]") + public static WebElement locateHub; + @FindBy(how = How.XPATH, using = "//button[@data-cy='Delete']") + public static WebElement deleteButton; + @FindBy(how = How.XPATH, using = "//button[@id='navbar-hub']") + public static WebElement hubPage; + @FindBy(how = How.XPATH, using = "//*[contains(text(),'No entities found in namespace \"default\"')]") + public static WebElement deletedElementStatus; + @FindBy(how = How.XPATH, using = "//div[@class='entities-all-list-container']//button[@class='btn btn-link']" + + "//*[@class='icon-svg icon-trash']") + public static WebElement deleteIconControlCenter; + + public static WebElement locateArtifact(String option) { + return SeleniumDriver.getDriver() + .findElement(By.xpath("//*[contains(text(),'" + option + "')]")); + } + + public static WebElement locateButton(String buttonName) { + return SeleniumDriver.getDriver() + .findElement(By.xpath("//*[contains(text(),'" + buttonName + "')]")); + } + + public static WebElement locateOptions(String featureName) { + return SeleniumDriver.getDriver().findElement(By.xpath("//span[@title='" + featureName + "']")); + } + + public static WebElement locateHamburgerOption(String option) { + return SeleniumDriver.getDriver().findElement(By.xpath("//*[@data-cy='" + option + "']")); + } + + public static WebElement locateErrorMessage(String errorMessage) { + return SeleniumDriver.getDriver().findElement(By.xpath("//*[contains(text(),'" + errorMessage + "')]")); + } +} diff --git a/src/main/java/stepsdesign/CdfHubSteps.java b/src/main/java/stepsdesign/CdfHubSteps.java new file mode 100644 index 000000000..64b0cbdad --- /dev/null +++ b/src/main/java/stepsdesign/CdfHubSteps.java @@ -0,0 +1,132 @@ +/* + * Copyright © 2023 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package stepsdesign; + +import io.cdap.e2e.pages.actions.CdfHubActions; +import io.cdap.e2e.pages.locators.CdfHubLocators; +import io.cdap.e2e.utils.CdfHelper; +import io.cdap.e2e.utils.SeleniumHelper; +import io.cucumber.java.en.Then; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * CDF hub related step design. + */ +public class CdfHubSteps implements CdfHelper { + private static final Logger logger = LoggerFactory.getLogger(CdfHubSteps.class); + static { + SeleniumHelper.getPropertiesLocators(CdfHubLocators.class); + } + + @Then("Click on Hub Menu") + public static void openHub() { + CdfHubActions.clickOnHub(); + } + + @Then("Click on {string} plugin") + public static void openPlugin(String pluginName) { + CdfHubActions.clickOnOptionsFromHub(pluginName); + } + + @Then("Click on {string} pipeline") + public static void openPipeline(String pipelineName) { + CdfHubActions.clickOnOptionsFromHub(pipelineName); + } + + @Then("Click on {string} option") + public static void openOptions(String option) { + CdfHubActions.clickOnOptions(option); + } + + @Then("Click on close button") + public static void closeButton() { + CdfHubActions.clickOnCloseButton(); + } + + @Then("Deploy the plugin") + public static void deployPlugin() { + CdfHubActions.clickOnDeploy(); + CdfHubActions.clickOnFinish(); + } + + @Then("Enter the text in search tab {string}") + public static void openSearch(String value) { + CdfHubActions.clickOnSearchTab(value); + } + + @Then("Verify that user is getting an error message: {string}") + public void verifyErrorMessageDisplayedOnPluginHeader(String errorMessageLocation) { + CdfHubActions.verifyErrorMessage(errorMessageLocation); + } + + @Then("Verify that user is navigated to hub page successfully") + public void verifyThatHubPageIsSuccessfullyOpened() { + CdfHubActions.verifyElementIsDisplayed(); + } + + @Then("Verify that {string} plugin is successfully deployed") + public void verifyThatPluginIsSuccessfullyDeployed(String pluginName) { + CdfHubActions.verifyPluginIsDeployed(pluginName); + } + + @Then("Click on delete button to delete the plugin") + public void deleteControlCenterPlugin() { + CdfHubActions.deletePluginControlCenter(); + } + + @Then("Verify that plugin is successfully deleted") + public static void verifyPluginIsDeleted() { + CdfHubActions.verifyPluginIsDeleted(); + } + + @Then("Click on {string} button") + public static void clickOnButton(String buttonName) { + CdfHubActions.clickOnButton(buttonName); + } + + @Then("Verify that {string} plugin is successfully verified in studio") + public static void verifyPluginInStudio(String pluginName) { + CdfHubActions.verifyPluginInStudio(pluginName); + } + + @Then("Verify that {string} plugin is displayed on the Hub page") + public static void verifyPluginIsDisplayedInHub(String pluginName) { + CdfHubActions.verifyPluginIsDisplayed(pluginName); + } + + @Then("Create the pipeline") + public static void createPipeline() { + CdfHubActions.clickOnCreateButton(); + CdfHubActions.clickOnFinish(); + } + + @Then("Click on the {string} from the left panel") + public static void clickOnTheOptionsFromHamburgerMenu(String option) { + CdfHubActions.clickOnOptionFromHamburgerMenu(option); + } + + @Then("Click on the {string} option from the list panel") + public static void clickOnTheOption(String button) { + CdfHubActions.clickOnButton(button); + } + + @Then("Verify that {string} pipeline is saved in drafts") + public static void verifyPipelineStatus(String pipelineName) { + CdfHubActions.verifyPipelineStatus(pipelineName); + } +}