adding selenium tests for ingestion page (#1333)

* adding selenium tests for ingestion page

* adding few tests changes and addressing reviewdog findings

* testing selenium workflow
This commit is contained in:
parthp2107 2021-11-23 14:58:11 +05:30 committed by GitHub
parent 03057b8bc6
commit 72f5320914
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 264 additions and 117 deletions

View File

@ -22,6 +22,9 @@ jobs:
java-version: '11' java-version: '11'
distribution: 'adopt' distribution: 'adopt'
- name: Generating Data Models
run: make install_dev generate
- name: Start Server and Ingest Sample Data - name: Start Server and Ingest Sample Data
run: ./docker/run_local_docker.sh run: ./docker/run_local_docker.sh

View File

@ -327,6 +327,7 @@ const Ingestion: React.FC<Props> = ({
<div className="tw-flex"> <div className="tw-flex">
<div <div
className="link-text tw-mr-2" className="link-text tw-mr-2"
data-testid="run"
onClick={() => onClick={() =>
handleTriggerIngestion( handleTriggerIngestion(
ingestion.id as string, ingestion.id as string,
@ -345,6 +346,7 @@ const Ingestion: React.FC<Props> = ({
</div> </div>
<div <div
className="link-text tw-mr-2" className="link-text tw-mr-2"
data-testid="edit"
onClick={() => handleUpdate(ingestion)}> onClick={() => handleUpdate(ingestion)}>
{updateSelection.id === ingestion.id ? ( {updateSelection.id === ingestion.id ? (
updateSelection.state === 'success' ? ( updateSelection.state === 'success' ? (
@ -358,6 +360,7 @@ const Ingestion: React.FC<Props> = ({
</div> </div>
<div <div
className="link-text tw-mr-2" className="link-text tw-mr-2"
data-testid="delete"
onClick={() => onClick={() =>
ConfirmDelete( ConfirmDelete(
ingestion.id as string, ingestion.id as string,

View File

@ -446,6 +446,7 @@ const IngestionModal: React.FC<IngestionModalProps> = ({
</label> </label>
<input <input
className="tw-form-inputs tw-px-3 tw-py-1" className="tw-form-inputs tw-px-3 tw-py-1"
data-testid="includeFilterPattern"
id="includeFilterPattern" id="includeFilterPattern"
name="includeFilterPattern" name="includeFilterPattern"
placeholder="Include filter patterns comma seperated" placeholder="Include filter patterns comma seperated"
@ -460,6 +461,7 @@ const IngestionModal: React.FC<IngestionModalProps> = ({
</label> </label>
<input <input
className="tw-form-inputs tw-px-3 tw-py-1" className="tw-form-inputs tw-px-3 tw-py-1"
data-testid="excludeFilterPattern"
id="excludeFilterPattern" id="excludeFilterPattern"
name="excludeFilterPattern" name="excludeFilterPattern"
placeholder="Exclude filter patterns comma seperated" placeholder="Exclude filter patterns comma seperated"
@ -526,6 +528,7 @@ const IngestionModal: React.FC<IngestionModalProps> = ({
<label htmlFor="endDate">End date (UTC):</label> <label htmlFor="endDate">End date (UTC):</label>
<input <input
className="tw-form-inputs tw-px-3 tw-py-1" className="tw-form-inputs tw-px-3 tw-py-1"
data-testid="endDate"
min={startDate} min={startDate}
type="date" type="date"
value={endDate} value={endDate}

View File

@ -0,0 +1,136 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.openmetadata.catalog.selenium.pages.ingestion;
import com.github.javafaker.Faker;
import org.openmetadata.catalog.selenium.events.Events;
import org.openmetadata.catalog.selenium.properties.Property;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.MethodOrderer;
import java.time.Duration;
import java.util.ArrayList;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class IngestionPageTest {
static WebDriver webDriver;
static String url = Property.getInstance().getURL();
static Faker faker = new Faker();
static Actions actions;
static WebDriverWait wait;
Integer waitTime = Property.getInstance().getSleepTime();
@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);
}
@Test
@Order(1)
public void openIngestionPage() throws InterruptedException {
Events.click(webDriver, By.cssSelector("[data-testid='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-Ingestions']")); // Setting/Services
Thread.sleep(waitTime);
}
@Test
@Order(2)
public void addIngestionService() throws InterruptedException {
openIngestionPage();
Events.click(webDriver, By.cssSelector("[data-testid='add-new-user-button']"));
Events.sendKeys(webDriver, By.cssSelector("[id='name'][name='name']"), faker.name().firstName());
Events.click(webDriver, By.cssSelector("[value='BigQuery$$bigquery']"));
Events.click(webDriver, By.cssSelector("[value='bigquery']"));
Events.click(webDriver, By.cssSelector("[data-testid='next-button']"));
Events.sendKeys(webDriver, By.cssSelector("[name='username']"), "openmetadata_user");
Events.sendKeys(webDriver, By.cssSelector("[name='password']"), "openmetadata_password");
Events.sendKeys(webDriver, By.cssSelector("[name='host']"), "localhost:3306");
Events.sendKeys(webDriver, By.cssSelector("[name='database']"), "openmetadata_db");
Events.click(webDriver, By.cssSelector("[data-testid='next-button']"));
Events.click(webDriver, By.cssSelector("[value='week']"));
Events.click(webDriver, By.cssSelector("[value='4']"));
Events.click(webDriver, By.cssSelector("[value='21']"));
Events.sendKeys(webDriver, By.cssSelector("[data-testid='endDate']"), "21072022");
Events.click(webDriver, By.cssSelector("[data-testid='next-button']"));
Events.click(webDriver, By.cssSelector("[data-testid='save-button']"));
}
@Test
@Order(3)
public void runIngestionService() throws InterruptedException{
openIngestionPage();
Events.click(webDriver, By.cssSelector("[data-testid='run']"));
webDriver.navigate().refresh();
}
@Test
@Order(4)
public void editIngestionService() throws InterruptedException{
openIngestionPage();
Events.click(webDriver, By.cssSelector("[data-testid='edit']"));
Events.sendKeys(webDriver, By.cssSelector("[data-testid='includeFilterPattern']"), ",");
Events.click(webDriver, By.cssSelector("[data-testid='next-button']"));
Events.click(webDriver, By.cssSelector("[value='hour']"));
Events.click(webDriver, By.cssSelector("[value='20']"));
Events.click(webDriver, By.cssSelector("[data-testid='next-button']"));
Events.click(webDriver, By.cssSelector("[data-testid='save-button']"));
}
@Test
@Order(5)
public void deleteIngestionService() throws InterruptedException {
openIngestionPage();
Events.click(webDriver, By.cssSelector("[data-testid='delete']"));
Events.click(webDriver, By.cssSelector("[data-testid='save-button']"));
webDriver.navigate().refresh();
}
@AfterEach
public void closeTabs() {
ArrayList<String> 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();
}
}

View File

@ -16,6 +16,10 @@
package org.openmetadata.catalog.selenium.pages.myData; package org.openmetadata.catalog.selenium.pages.myData;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.openmetadata.catalog.selenium.events.Events; import org.openmetadata.catalog.selenium.events.Events;
import org.openmetadata.catalog.selenium.properties.Property; import org.openmetadata.catalog.selenium.properties.Property;
import org.openqa.selenium.By; import org.openqa.selenium.By;
@ -25,130 +29,127 @@ import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait; import org.openqa.selenium.support.ui.WebDriverWait;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Order;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
public class MyDataPageTest { public class MyDataPageTest {
static WebDriver webDriver; static WebDriver webDriver;
static String url = Property.getInstance().getURL(); static String url = Property.getInstance().getURL();
Integer waitTime = Property.getInstance().getSleepTime(); static Actions actions;
static Actions actions; static WebDriverWait wait;
static WebDriverWait wait; Integer waitTime = Property.getInstance().getSleepTime();
@BeforeEach
public void openMetadataWindow() {
System.setProperty("webdriver.chrome.driver", "src/test/resources/drivers/linux/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
webDriver = new ChromeDriver(options);
actions = new Actions(webDriver);
wait = new WebDriverWait(webDriver, Duration.ofSeconds(30));
webDriver.manage().window().maximize();
webDriver.get(url);
}
@Test
@Order(1)
public void checkWhatsNew() {
Events.click(webDriver, By.xpath("//ul[@class='slick-dots testid-dots-button']//li[2]")); // What's new page 2
Events.click(webDriver, By.cssSelector("[data-testid='WhatsNewModalChangeLogs']")); // Change Logs
Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
}
@Test
@Order(2)
public void checkTabs() {
checkWhatsNew();
Events.click(webDriver, By.cssSelector("[data-testid='tab'][id='myDataTab']")); // My Data
Events.click(webDriver, By.cssSelector("[data-testid='tab'][id='followingTab']")); // Following
}
@Test
@Order(3)
public void checkOverview() throws InterruptedException {
checkWhatsNew();
Events.click(webDriver, By.cssSelector("[data-testid='tables']")); // Tables
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='topics']")); // Topics
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='dashboards']")); // Dashboard
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='pipelines']")); // Pipeline
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='service']")); // Services
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='ingestion']")); // Services
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='user']")); // Users
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='terms']")); // Teams
}
@Test
@Order(4)
public void checkSearchBar() throws InterruptedException {
checkWhatsNew();
wait.until(ExpectedConditions.elementToBeClickable(
webDriver.findElement(By.cssSelector("[id='searchBox']")))); // Search bar/dim
Events.sendKeys(webDriver, By.cssSelector("[id='searchBox']"), "dim"); // Search bar/dim
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='data-name']")); // Search bar/dim
}
@BeforeEach @Test
public void openMetadataWindow() { @Order(5)
System.setProperty("webdriver.chrome.driver", "src/test/resources/drivers/linux/chromedriver"); public void checkHeaders() {
ChromeOptions options = new ChromeOptions(); checkWhatsNew();
options.addArguments("--headless"); ArrayList<String> tabs = new ArrayList<>(webDriver.getWindowHandles());
webDriver = new ChromeDriver(options); Events.click(webDriver, By.cssSelector("[data-testid='appbar-item'][id='explore']")); // Explore
actions = new Actions(webDriver); webDriver.navigate().back();
wait = new WebDriverWait(webDriver, Duration.ofSeconds(30)); Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Settings']")); // Setting
webDriver.manage().window().maximize(); Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Teams']")); // Setting/Teams
webDriver.get(url); webDriver.navigate().back();
} Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Settings']")); // Setting
Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Tags']")); // Setting/Tags
@Test webDriver.navigate().back();
@Order(1) Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Settings']")); // Setting
public void checkWhatsNew() { Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Services']")); // Setting/Services
Events.click(webDriver, By.xpath("//ul[@class='slick-dots testid-dots-button']//li[2]")); // What's new page 2 Events.click(webDriver, By.cssSelector("[data-testid='whatsnew-modal']")); // What's New
Events.click(webDriver, By.cssSelector("[data-testid='WhatsNewModalChangeLogs']")); // Change Logs checkWhatsNew();
Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Need Help']"));
} Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Docs']"));
webDriver.switchTo().window(tabs.get(0));
@Test
@Order(2) Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Need Help']"));
public void checkTabs() { Events.click(webDriver, By.cssSelector("[data-testid='menu-item-API']"));
checkWhatsNew(); webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='tab'][id='myDataTab']")); // My Data
Events.click(webDriver, By.cssSelector("[data-testid='tab'][id='followingTab']")); // Following Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Need Help']"));
} Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Slack']"));
webDriver.switchTo().window(tabs.get(0));
@Test }
@Order(3)
public void checkOverview() throws InterruptedException { @Test
checkWhatsNew(); @Order(6)
Events.click(webDriver, By.cssSelector("[data-testid='tables']")); // Tables public void checkLogout() {
webDriver.navigate().back(); checkWhatsNew();
Events.click(webDriver, By.cssSelector("[data-testid='topics']")); // Topics Events.click(webDriver, By.cssSelector("[data-testid='greeting-text']"));
webDriver.navigate().back(); Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Logout']"));
Events.click(webDriver, By.cssSelector("[data-testid='dashboards']")); // Dashboard }
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='pipelines']")); // Pipeline @AfterEach
webDriver.navigate().back(); public void closeTabs() {
Events.click(webDriver, By.cssSelector("[data-testid='service']")); // Services ArrayList<String> tabs = new ArrayList<>(webDriver.getWindowHandles());
webDriver.navigate().back(); String originalHandle = webDriver.getWindowHandle();
Events.click(webDriver, By.cssSelector("[data-testid='user']")); // Users for (String handle : webDriver.getWindowHandles()) {
webDriver.navigate().back(); if (!handle.equals(originalHandle)) {
Events.click(webDriver, By.cssSelector("[data-testid='terms']")); // Teams webDriver.switchTo().window(handle);
} webDriver.close();
}
@Test
@Order(4)
public void checkSearchBar() throws InterruptedException {
checkWhatsNew();
wait.until(ExpectedConditions.elementToBeClickable(
webDriver.findElement(By.cssSelector("[id='searchBox']")))); // Search bar/dim
Events.sendKeys(webDriver, By.cssSelector("[id='searchBox']"), "dim"); // Search bar/dim
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='data-name']")); // Search bar/dim
}
@Test
@Order(5)
public void checkHeaders() {
checkWhatsNew();
ArrayList<String> tabs = new ArrayList<>(webDriver.getWindowHandles());
Events.click(webDriver, By.cssSelector("[data-testid='appbar-item'][id='explore']")); // Explore
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Settings']")); // Setting
Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Teams']")); // Setting/Teams
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Settings']")); // Setting
Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Tags']")); // Setting/Tags
webDriver.navigate().back();
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='whatsnew-modal']")); // What's New
checkWhatsNew();
Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Need Help']"));
Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Docs']"));
webDriver.switchTo().window(tabs.get(0));
Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Need Help']"));
Events.click(webDriver, By.cssSelector("[data-testid='menu-item-API']"));
webDriver.navigate().back();
Events.click(webDriver, By.cssSelector("[data-testid='menu-button'][id='menu-button-Need Help']"));
Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Slack']"));
webDriver.switchTo().window(tabs.get(0));
}
@Test
@Order(6)
public void checkLogout() {
checkWhatsNew();
Events.click(webDriver, By.cssSelector("[data-testid='greeting-text']"));
Events.click(webDriver, By.cssSelector("[data-testid='menu-item-Logout']"));
}
@AfterEach
public void closeTabs() {
ArrayList<String> 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();
} }
webDriver.switchTo().window(tabs.get(0)).close();
}
} }

View File

@ -111,6 +111,7 @@ public class TopicDetailsPageTest {
} }
Events.click(webDriver, By.cssSelector("[data-testid='saveAssociatedTag']")); Events.click(webDriver, By.cssSelector("[data-testid='saveAssociatedTag']"));
Events.click(webDriver, By.cssSelector("[data-testid='appbar-item'][id='explore']")); // Explore Events.click(webDriver, By.cssSelector("[data-testid='appbar-item'][id='explore']")); // Explore
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[2]")); // Topics
Events.click(webDriver, By.cssSelector("[data-testid='checkbox'][id='PersonalData.Personal']")); Events.click(webDriver, By.cssSelector("[data-testid='checkbox'][id='PersonalData.Personal']"));
} }