From 48fb162116baf4f000bdfd27dd12b6149dc63efb Mon Sep 17 00:00:00 2001
From: parthp2107 <83201188+parthp2107@users.noreply.github.com>
Date: Thu, 23 Dec 2021 10:42:42 +0530
Subject: [PATCH] added tests for checking exception handling on ui (#1867)
---
openmetadata-ui/pom.xml | 8 +
.../pages/common/UiExceptionHandling.java | 154 ++++++++++++++++++
2 files changed, 162 insertions(+)
create mode 100644 openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/pages/common/UiExceptionHandling.java
diff --git a/openmetadata-ui/pom.xml b/openmetadata-ui/pom.xml
index 8bc262b4aad..ec4441560f9 100644
--- a/openmetadata-ui/pom.xml
+++ b/openmetadata-ui/pom.xml
@@ -69,6 +69,14 @@
2.1.6
test
+
+
+ io.rest-assured
+ rest-assured
+ 4.4.0
+ test
+
+
diff --git a/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/pages/common/UiExceptionHandling.java b/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/pages/common/UiExceptionHandling.java
new file mode 100644
index 00000000000..c1ce6a63567
--- /dev/null
+++ b/openmetadata-ui/src/test/java/org/openmetadata/catalog/selenium/pages/common/UiExceptionHandling.java
@@ -0,0 +1,154 @@
+package org.openmetadata.catalog.selenium.pages.common;
+
+import com.github.javafaker.Faker;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openmetadata.catalog.selenium.events.Events;
+import org.openmetadata.catalog.selenium.properties.Property;
+import org.openqa.selenium.By;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.v95.fetch.Fetch;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.testng.Assert;
+
+import java.time.Duration;
+import java.util.ArrayList;
+import java.util.Optional;
+
+public class UiExceptionHandling {
+
+ static ChromeDriver webDriver;
+ static DevTools devTools;
+ static String url = Property.getInstance().getURL();
+ static Actions actions;
+ static WebDriverWait wait;
+ static String enterDescription = "//div[@data-testid='enterDescription']/div/div[2]/div/div/div/div/div/div";
+ static Faker faker = new Faker();
+ static String serviceName = faker.name().firstName();
+
+
+ public void interceptor(String content, String replaceContent) {
+ devTools.createSession();
+ devTools.send(Fetch.enable(Optional.empty(), Optional.empty()));
+ devTools.addListener(Fetch.requestPaused(), request ->
+ {
+ if(request.getRequest().getUrl().contains(content))
+ {
+ String mockedUrl = request.getRequest().getUrl().replace(content, replaceContent);
+ devTools.send(Fetch.continueRequest(request.getRequestId(), Optional.of(mockedUrl), Optional.of(request.getRequest().getMethod()),
+ Optional.empty(), Optional.empty(), Optional.empty()));
+ }
+ else {
+ devTools.send(Fetch.continueRequest(request.getRequestId(), Optional.of(request.getRequest().getUrl()), Optional.of(request.getRequest().getMethod()),
+ Optional.empty(), Optional.empty(), Optional.empty()));
+ }
+ });
+ }
+
+ @BeforeEach
+ public void openMetadataWindow() {
+ System.setProperty("webdriver.chrome.driver", "src/test/resources/drivers/linux/chromedriver");
+ ChromeOptions options = new ChromeOptions();
+ options.addArguments("--headless");
+ options.addArguments("--window-size=1280,800");
+ webDriver = new ChromeDriver(options);
+ actions = new Actions(webDriver);
+ wait = new WebDriverWait(webDriver, Duration.ofSeconds(30));
+ webDriver.manage().window().maximize();
+ webDriver.get(url);
+ devTools = webDriver.getDevTools();
+ }
+
+ @Test
+ public void exceptionCheckForUserList() {
+ interceptor("users", "testing");
+ Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
+ Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Settings']")); // Setting
+ Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Users']")); // Setting/Users
+ Events.click(webDriver, By.xpath("//*[text()[contains(.,'" + "Request failed with status code 400" + "')]]"));
+ Events.click(webDriver, By.cssSelector("[data-testid='dismiss']"));
+ Assert.assertEquals(400, 400);
+ }
+
+ @Test
+ public void exceptionCheckForGetServices() throws InterruptedException {
+ interceptor("databaseService", "testing");
+ Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
+ 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
+ Thread.sleep(2000);
+ Events.click(webDriver, By.xpath("//*[text()[contains(.,'" + "No services found" + "')]]"));
+ Assert.assertEquals(500, 500);
+ }
+
+ @Test
+ public void exceptionCheckFor() {
+ interceptor("services/databaseServices", "services/testing");
+ Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
+ 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
+ }
+
+ @Test
+ public void exceptionCheckForPostService() {
+ Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
+ 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, By.cssSelector("[data-testid='add-new-user-button']"));
+ 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());
+ interceptor("services/databaseServices", "services/testing");
+ Events.click(webDriver, By.cssSelector("[data-testid='save-button']"));
+ Events.click(webDriver, By.xpath("//*[text()[contains(.,'" + "Request failed with status code 500" + "')]]"));
+ Events.click(webDriver, By.cssSelector("[data-testid='dismiss']"));
+ Assert.assertEquals(500, 500);
+ }
+
+ @Test
+ public void exceptionCheckForUpdateService() {
+ Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
+ 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, By.cssSelector("[data-testid='edit-service-"+ "bigquery_gcp" + "']"));
+ Events.click(webDriver, By.xpath(enterDescription));
+ Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString());
+ interceptor("services/databaseServices", "services/testing");
+ Events.click(webDriver, By.cssSelector("[data-testid='save-button']"));
+ Events.click(webDriver, By.xpath("//*[text()[contains(.,'" + "Request failed with status code 500" + "')]]"));
+ Events.click(webDriver, By.cssSelector("[data-testid='dismiss']"));
+ Assert.assertEquals(500, 500);
+ }
+
+ @Test
+ public void exceptionCheckForDeleteService() {
+ Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
+ 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, By.cssSelector("[data-testid='delete-service-"+ "bigquery_gcp" + "']"));
+ interceptor("services/databaseServices", "services/testing");
+ Assert.assertEquals(500, 500);
+ }
+
+ @AfterEach
+ public void closeTabs() {
+ ArrayList tabs = new ArrayList<>(webDriver.getWindowHandles());
+ String originalHandle = webDriver.getWindowHandle();
+ for (String handle : webDriver.getWindowHandles()) {
+ if (!handle.equals(originalHandle)) {
+ webDriver.switchTo().window(handle);
+ webDriver.close();
+ }
+ }
+ webDriver.switchTo().window(tabs.get(0)).close();
+ }
+}