From 22b31f461806072fcdd5d1102923e25a45dc1da4 Mon Sep 17 00:00:00 2001 From: parthp2107 <83201188+parthp2107@users.noreply.github.com> Date: Tue, 1 Feb 2022 18:43:10 +0530 Subject: [PATCH] revamped database service listing page (#2534) --- .../AddServiceModal/AddServiceModal.tsx | 1 + .../objectRepository/DatabaseServicePage.java | 114 ++++++++++++++++++ .../DatabaseServicePageTest.java | 107 +++++++++------- 3 files changed, 178 insertions(+), 44 deletions(-) create mode 100644 openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/objectRepository/DatabaseServicePage.java diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Modals/AddServiceModal/AddServiceModal.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Modals/AddServiceModal/AddServiceModal.tsx index 7c0ff025fb2..1e75c8ad661 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Modals/AddServiceModal/AddServiceModal.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Modals/AddServiceModal/AddServiceModal.tsx @@ -1624,6 +1624,7 @@ export const AddServiceModal: FunctionComponent = ({ 'tw-border-primary': service === selectService, } )} + data-testid={service} key={service} onClick={() => handleServiceClick(service)}>
diff --git a/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/objectRepository/DatabaseServicePage.java b/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/objectRepository/DatabaseServicePage.java new file mode 100644 index 00000000000..d3c8ca0af3f --- /dev/null +++ b/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/objectRepository/DatabaseServicePage.java @@ -0,0 +1,114 @@ +package org.openmetadata.catalog.selenium.objectRepository; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; + +public class DatabaseServicePage { + WebDriver webDriver; + + public DatabaseServicePage(WebDriver webDriver) { + this.webDriver = webDriver; + } + + By headerSettingsServices = By.cssSelector("[data-testid='menu-item-Services']"); + By noServicesAddServiceButton = By.cssSelector("[data-testid='add-new-user-button']"); + By addServiceButton = By.cssSelector("[data-testid='add-service-button']"); + By serviceName = By.cssSelector("[data-testid='name']"); + By serviceUrl = By.cssSelector("[data-testid='url']"); + By servicePort = By.cssSelector("[data-testid='port']"); + By serviceUsername = By.cssSelector("[name='username']"); + By servicePassword = By.cssSelector("[name='password']"); + By databaseName = By.cssSelector("[data-testid='database']"); + By nextButton = By.cssSelector("[data-testid='next-button']"); + By saveServiceButton = By.cssSelector("[data-testid='deploy-button']"); + By saveEditedService = By.cssSelector("[data-testid='save-button']"); + By runIngestion = By.cssSelector("[data-testid='run']"); + By editIngestion = By.cssSelector("[data-testid='edit']"); + By deleteIngestion = By.cssSelector("[data-testid='delete']"); + By saveConnectionConfig = By.cssSelector("[data-testid='saveManageTab']"); + By selectInterval = By.xpath("//select[@id='ingestionType']"); + + public By headerSettingsServices() { + return headerSettingsServices; + } + + public By addServiceButton() { + return addServiceButton; + } + + public By noServicesAddServiceButton() { + return noServicesAddServiceButton; + } + + public By serviceType(String serviceType) { + return By.cssSelector("[data-testid='" + serviceType + "']"); + } + + public By serviceName() { + return serviceName; + } + + public By servicePort() { + return servicePort; + } + + public By serviceUsername() { + return serviceUsername; + } + + public By servicePassword() { + return servicePassword; + } + + public By serviceUrl() { + return serviceUrl; + } + + public By databaseName() { + return databaseName; + } + + public By nextButton() { + return nextButton; + } + + public By saveServiceButton() { + return saveServiceButton; + } + + public By deleteServiceButton(String serviceName) { + return By.cssSelector("[data-testid='delete-service-" + serviceName + "']"); + } + + public By saveEditedService() { + return saveEditedService; + } + + public By serviceDetailsTabs(String tab) { + return By.cssSelector("[data-testid='tab'][id='" + tab + "']"); + } + + public By runIngestion() { + return runIngestion; + } + + public By editIngestion() { + return editIngestion; + } + + public By deleteIngestion() { + return deleteIngestion; + } + + public By selectInterval() { + return selectInterval; + } + + public By ingestionInterval(String interval) { + return By.xpath("//select[@id='ingestionType']/option[@value='" + interval + "']"); + } + + public By saveConnectionConfig() { + return saveConnectionConfig; + } +} diff --git a/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/pages/databaseService/DatabaseServicePageTest.java b/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/pages/databaseService/DatabaseServicePageTest.java index 6210ba0cdc1..f2902b19480 100644 --- a/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/pages/databaseService/DatabaseServicePageTest.java +++ b/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/pages/databaseService/DatabaseServicePageTest.java @@ -24,8 +24,9 @@ import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import org.openmetadata.catalog.selenium.events.Events; +import org.openmetadata.catalog.selenium.objectRepository.DatabaseServicePage; +import org.openmetadata.catalog.selenium.objectRepository.TagsPage; import org.openmetadata.catalog.selenium.properties.Property; -import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; @@ -38,10 +39,11 @@ import org.openqa.selenium.support.ui.WebDriverWait; public class DatabaseServicePageTest { static WebDriver webDriver; + static TagsPage tagsPage; + static DatabaseServicePage databaseServicePage; static String url = Property.getInstance().getURL(); static Faker faker = new Faker(); static String serviceName = faker.name().firstName(); - static String enterDescription = "//div[@data-testid='enterDescription']/div/div[2]/div/div/div/div/div/div"; static Actions actions; static WebDriverWait wait; Integer waitTime = Property.getInstance().getSleepTime(); @@ -52,6 +54,8 @@ public class DatabaseServicePageTest { ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); webDriver = new ChromeDriver(options); + tagsPage = new TagsPage(webDriver); + databaseServicePage = new DatabaseServicePage(webDriver); actions = new Actions(webDriver); wait = new WebDriverWait(webDriver, Duration.ofSeconds(30)); webDriver.manage().window().maximize(); @@ -61,10 +65,10 @@ public class DatabaseServicePageTest { @Test @Order(1) public void openDatabaseServicePage() throws InterruptedException { - Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new + Events.click(webDriver, tagsPage.closeWhatsNew()); // Close What's new Thread.sleep(waitTime); - Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Settings']")); // Setting - Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Services']")); // Setting/Services + Events.click(webDriver, tagsPage.headerSettings()); // Setting + Events.click(webDriver, databaseServicePage.headerSettingsServices()); // Setting/Services Thread.sleep(waitTime); } @@ -72,64 +76,79 @@ public class DatabaseServicePageTest { @Order(2) public void addDatabaseService() throws InterruptedException { openDatabaseServicePage(); - Thread.sleep(2000); - List webElementList = webDriver.findElements(By.cssSelector("[data-testid='add-new-user-button']")); + List webElementList = webDriver.findElements(databaseServicePage.addServiceButton()); if (webElementList.isEmpty()) { - Events.click(webDriver, By.cssSelector("[data-testid='add-service-button']")); + Events.click(webDriver, databaseServicePage.noServicesAddServiceButton()); } else { - Events.click(webDriver, By.cssSelector("[data-testid='add-new-user-button']")); + Events.click(webDriver, databaseServicePage.addServiceButton()); } - Events.click(webDriver, By.cssSelector("[data-testid='selectService']")); - Events.click(webDriver, By.cssSelector("[value='MySQL']")); - Events.sendKeys(webDriver, By.cssSelector("[data-testid='name']"), serviceName); - Events.sendKeys(webDriver, By.cssSelector("[data-testid='url']"), "localhost:3306"); - Events.sendKeys(webDriver, By.cssSelector("[data-testid='database']"), "openmetadata_db"); - - Events.click(webDriver, By.cssSelector("[data-testid='boldButton']")); - Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString()); - Events.click(webDriver, By.xpath(enterDescription)); - Events.sendEnter(webDriver, By.xpath(enterDescription)); - Events.click(webDriver, By.cssSelector("[data-testid='italicButton']")); - Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString()); - Events.click(webDriver, By.xpath(enterDescription)); - Events.sendEnter(webDriver, By.xpath(enterDescription)); - Events.click(webDriver, By.cssSelector("[data-testid='linkButton']")); - Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString()); - Events.click(webDriver, By.cssSelector("[data-testid='save-button']")); + Events.click(webDriver, databaseServicePage.serviceType("MySQL")); + Events.click(webDriver, databaseServicePage.nextButton()); + Events.sendKeys(webDriver, databaseServicePage.serviceName(), serviceName); + Events.click(webDriver, tagsPage.descriptionBoldButton()); + Events.sendKeys(webDriver, tagsPage.addDescriptionString(), faker.address().toString()); + Events.click(webDriver, tagsPage.addDescriptionString()); + Events.sendEnter(webDriver, tagsPage.addDescriptionString()); + Events.click(webDriver, tagsPage.descriptionItalicButton()); + Events.sendKeys(webDriver, tagsPage.addDescriptionString(), faker.address().toString()); + Events.click(webDriver, tagsPage.addDescriptionString()); + Events.sendEnter(webDriver, tagsPage.addDescriptionString()); + Events.click(webDriver, tagsPage.descriptionLinkButton()); + Events.sendKeys(webDriver, tagsPage.addDescriptionString(), faker.address().toString()); + Events.click(webDriver, databaseServicePage.nextButton()); + Events.sendKeys(webDriver, databaseServicePage.serviceUrl(), "localhost"); + Events.sendKeys(webDriver, databaseServicePage.servicePort(), "3306"); + Events.sendKeys(webDriver, databaseServicePage.serviceUsername(), "openmetadata_user"); + Events.sendKeys(webDriver, databaseServicePage.servicePassword(), "openmetadata_password"); + Events.sendKeys(webDriver, databaseServicePage.databaseName(), "openmetadata_db"); + Events.click(webDriver, databaseServicePage.nextButton()); + Events.click(webDriver, databaseServicePage.nextButton()); + Events.click(webDriver, databaseServicePage.saveServiceButton()); } @Test @Order(3) - public void editDatabaseService() throws InterruptedException { + public void checkDatabaseServiceDetails() throws InterruptedException { openDatabaseServicePage(); Thread.sleep(2000); - Events.click(webDriver, By.cssSelector("[data-testid='edit-service-" + serviceName + "']")); - Events.click(webDriver, By.xpath(enterDescription)); - Events.sendEnter(webDriver, By.xpath(enterDescription)); - Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString()); - Events.click(webDriver, By.cssSelector("[data-testid='save-button']")); + Events.click(webDriver, tagsPage.containsText(serviceName)); + Events.click(webDriver, tagsPage.editTagCategoryDescription()); + Events.click(webDriver, tagsPage.addDescriptionString()); + Events.sendKeys(webDriver, tagsPage.addDescriptionString(), faker.address().toString()); + Events.click(webDriver, tagsPage.editDescriptionSaveButton()); } @Test @Order(4) - public void checkDatabaseServiceDetails() throws InterruptedException { + public void checkIngestionTab() throws InterruptedException { openDatabaseServicePage(); Thread.sleep(2000); - Events.click(webDriver, By.cssSelector("[data-testid='service-name-" + serviceName + "']")); - Thread.sleep(waitTime); - Events.click(webDriver, By.cssSelector("[data-testid='edit-description']")); - Events.click(webDriver, By.xpath(enterDescription)); - Events.sendEnter(webDriver, By.xpath(enterDescription)); - Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString()); - Events.click(webDriver, By.cssSelector("[data-testid='save']")); + Events.click(webDriver, tagsPage.containsText("Demo1")); + Events.click(webDriver, databaseServicePage.serviceDetailsTabs("ingestions")); + Events.click(webDriver, databaseServicePage.runIngestion()); // run ingestion + + Events.click(webDriver, databaseServicePage.editIngestion()); // edit ingestion + Events.click(webDriver, databaseServicePage.nextButton()); + Events.click(webDriver, databaseServicePage.selectInterval()); + Events.click(webDriver, databaseServicePage.ingestionInterval("day")); + Events.click(webDriver, databaseServicePage.nextButton()); + Events.click(webDriver, databaseServicePage.saveServiceButton()); + + Events.click(webDriver, databaseServicePage.deleteIngestion()); // delete ingestion + Events.click(webDriver, databaseServicePage.saveEditedService()); } @Test @Order(5) - public void searchDatabaseService() throws InterruptedException { + public void checkConnectionConfigTab() throws InterruptedException { openDatabaseServicePage(); Thread.sleep(2000); - Events.click(webDriver, By.cssSelector("[data-testid='service-name-" + serviceName + "']")); + Events.click(webDriver, tagsPage.containsText(serviceName)); + Events.click(webDriver, databaseServicePage.serviceDetailsTabs("connectionConfig")); + Events.sendKeys(webDriver, databaseServicePage.serviceUsername(), "1"); + Events.sendKeys(webDriver, databaseServicePage.servicePassword(), "1"); + Events.sendKeys(webDriver, databaseServicePage.databaseName(), "1"); + Events.click(webDriver, databaseServicePage.saveConnectionConfig()); } @Test @@ -137,8 +156,8 @@ public class DatabaseServicePageTest { public void deleteDatabaseService() throws InterruptedException { openDatabaseServicePage(); Thread.sleep(2000); - Events.click(webDriver, By.cssSelector("[data-testid='delete-service-" + serviceName + "']")); - Events.click(webDriver, By.cssSelector("[data-testid='save-button']")); + Events.click(webDriver, databaseServicePage.deleteServiceButton(serviceName)); + Events.click(webDriver, databaseServicePage.saveEditedService()); } @AfterEach