Fix #1299: Move UI module into its own maven module (#1351)

* Fix #1299: Move UI module into its own maven module

* Fix #1299: fix indentation in selenium tests

* Fix #1299: fix indentation in selenium tests

* Fix #1299: fix indentation in selenium tests

* Fix: Updated json2ts command script

* Removed ignored file for bundle analyzer

* Updated gitignore

* Cleaning up the gitignore

Co-authored-by: darth-coder00 <aashit@getcollate.io>
This commit is contained in:
Sriharsha Chintalapani 2021-11-23 23:48:54 -08:00 committed by GitHub
parent 0d0e52aa8a
commit a180adc39c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
645 changed files with 2638 additions and 212 deletions

4
.gitignore vendored
View File

@ -65,8 +65,8 @@ dist
secrets
# ts build info and report
catalog-rest-service/src/main/resources/ui/webpack
catalog-rest-service/src/main/resources/ui/tsconfig.tsbuildinfo
openmetadata-ui/src/main/resources/ui/webpack
openmetadata-ui/src/main/resources/ui/tsconfig.tsbuildinfo
#tests
.coverage

View File

@ -319,14 +319,6 @@
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources/ui/dist</directory>
</resource>
<resource>
<directory>src/main/resources/json/data</directory>
</resource>
</resources>
<plugins>
<plugin>
@ -418,69 +410,6 @@
</execution>
</executions>
</plugin>
<!-- Handle Compiling Frontend -->
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.11.0</version>
<!-- optional -->
<configuration>
<workingDirectory>src/main/resources/ui/</workingDirectory>
<installDirectory>target</installDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v12.16.1</nodeVersion>
<npmVersion>6.13.4</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm run-script build-check</id>
<goals>
<goal>npm</goal>
</goals>
<!-- optional: the default phase is "generate-resources" -->
<phase>prepare-package</phase>
<configuration>
<!-- optional: if not specified, it will run gulp's default task
(and you can remove this whole <configuration> section.) -->
<arguments>run-script build-check</arguments>
<!--arguments>build</arguments-->
</configuration>
</execution>
<execution>
<id>npm run-script build</id>
<goals>
<goal>npm</goal>
</goals>
<!-- optional: the default phase is "generate-resources" -->
<phase>prepare-package</phase>
<configuration>
<!-- optional: if not specified, it will run gulp's default task
(and you can remove this whole <configuration> section.) -->
<arguments>run-script build</arguments>
<!--arguments>build</arguments-->
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>

View File

@ -25,7 +25,6 @@ import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
@ -40,153 +39,153 @@ import java.util.ArrayList;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class PipelineDetailsPageTest {
static WebDriver webDriver;
static String url = Property.getInstance().getURL();
Integer waitTime = Property.getInstance().getSleepTime();
static Faker faker = new Faker();
String pipelineName = "dim_product etl";
static String enterDescription = "//div[@data-testid='enterDescription']/div/div[2]/div/div/div/div/div/div";
static Actions actions;
static WebDriverWait wait;
static WebDriver webDriver;
static String url = Property.getInstance().getURL();
Integer waitTime = Property.getInstance().getSleepTime();
static Faker faker = new Faker();
String pipelineName = "dim_product etl";
static String enterDescription = "//div[@data-testid='enterDescription']/div/div[2]/div/div/div/div/div/div";
static Actions actions;
static WebDriverWait wait;
@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(5));
webDriver.manage().window().maximize();
webDriver.get(url);
}
@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(5));
webDriver.manage().window().maximize();
webDriver.get(url);
}
@Test
@Order(1)
public void openExplorePage() throws InterruptedException {
Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
Events.click(webDriver, By.cssSelector("[data-testid='appbar-item'][id='explore']")); // Explore
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[4]")); // Pipeline
Thread.sleep(waitTime);
}
@Test
@Order(1)
public void openExplorePage() throws InterruptedException {
Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
Events.click(webDriver, By.cssSelector("[data-testid='appbar-item'][id='explore']")); // Explore
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[4]")); // Pipeline
Thread.sleep(waitTime);
}
@Test
@Order(2)
public void editDescription() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[last()]"));
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']"));
Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString());
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
}
@Test
@Order(2)
public void editDescription() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[last()]"));
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']"));
Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString());
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
}
@Test
@Order(3)
public void addTag() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[last()]"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='tags']"));
Events.click(webDriver, By.cssSelector("[data-testid='associatedTagName']"));
for (int i = 1; i <=2; i++){
Events.sendKeys(webDriver, By.cssSelector("[data-testid='associatedTagName']"), "P");
Events.click(webDriver, By.cssSelector("[data-testid='list-item']"));
}
Events.click(webDriver, By.cssSelector("[data-testid='saveAssociatedTag']"));
webDriver.navigate().back();
webDriver.navigate().refresh();
@Test
@Order(3)
public void addTag() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[last()]"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='tags']"));
Events.click(webDriver, By.cssSelector("[data-testid='associatedTagName']"));
for (int i = 1; i <= 2; i++) {
Events.sendKeys(webDriver, By.cssSelector("[data-testid='associatedTagName']"), "P");
Events.click(webDriver, By.cssSelector("[data-testid='list-item']"));
}
Events.click(webDriver, By.cssSelector("[data-testid='saveAssociatedTag']"));
webDriver.navigate().back();
webDriver.navigate().refresh();
}
@Test
@Order(4)
public void removeTag() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[1]"));
Events.click(webDriver, By.cssSelector("[data-testid='tag-conatiner']"));
Events.click(webDriver, By.cssSelector("[data-testid='remove']"));
Events.click(webDriver, By.cssSelector("[data-testid='remove']"));
Events.click(webDriver, By.cssSelector("[data-testid='saveAssociatedTag']"));
}
@Test
@Order(4)
public void removeTag() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[1]"));
Events.click(webDriver, By.cssSelector("[data-testid='tag-conatiner']"));
Events.click(webDriver, By.cssSelector("[data-testid='remove']"));
Events.click(webDriver, By.cssSelector("[data-testid='remove']"));
Events.click(webDriver, By.cssSelector("[data-testid='saveAssociatedTag']"));
}
@Test
@Order(5)
public void editTaskDescription() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[last()]"));
Thread.sleep(waitTime);
actions.moveToElement(webDriver.findElement(By.xpath("//div[@data-testid='description']/button"))).perform();
Events.click(webDriver, By.xpath("//div[@data-testid='description']/button"));
Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString());
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
}
@Test
@Order(5)
public void editTaskDescription() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[last()]"));
Thread.sleep(waitTime);
actions.moveToElement(webDriver.findElement(By.xpath("//div[@data-testid='description']/button"))).perform();
Events.click(webDriver, By.xpath("//div[@data-testid='description']/button"));
Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString());
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
}
@Test
@Order(6)
public void checkLineage() throws InterruptedException {
openExplorePage();
Events.sendKeys(webDriver, By.cssSelector("[data-testid='searchBox']"), pipelineName);
Events.click(webDriver, By.cssSelector("[data-testid='data-name'][id ='sample_airflowdim_product_etl']"));
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[2]"));
for (int i=1; i<=3; i++) {
WebElement lineageEntity = webDriver.findElement(
By.xpath("(//span[@data-testid='lineage-entity'])" + "[" + i + "]"));
actions.dragAndDropBy(lineageEntity, 100, 200).build();
}
@Test
@Order(6)
public void checkLineage() throws InterruptedException {
openExplorePage();
Events.sendKeys(webDriver, By.cssSelector("[data-testid='searchBox']"), pipelineName);
Events.click(webDriver, By.cssSelector("[data-testid='data-name'][id ='sample_airflowdim_product_etl']"));
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[2]"));
for (int i = 1; i <= 3; i++) {
WebElement lineageEntity = webDriver.findElement(
By.xpath("(//span[@data-testid='lineage-entity'])" + "[" + i + "]"));
actions.dragAndDropBy(lineageEntity, 100, 200).build();
}
}
@Test
@Order(7)
public void checkManage() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[last()]"));
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[3]"));
Events.click(webDriver, By.cssSelector("[data-testid='owner-dropdown']")); // Owner
Events.sendKeys(webDriver, By.cssSelector("[data-testid='searchInputText']"), "Cloud");
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Select User/Team
Events.click(webDriver, By.cssSelector("[data-testid='card-list']")); // Select Tier
Events.click(webDriver, By.cssSelector("[data-testid='saveManageTab']")); // Save
webDriver.navigate().back();
webDriver.navigate().refresh();
}
@Test
@Order(7)
public void checkManage() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//a[@data-testid='table-link'])[last()]"));
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[3]"));
Events.click(webDriver, By.cssSelector("[data-testid='owner-dropdown']")); // Owner
Events.sendKeys(webDriver, By.cssSelector("[data-testid='searchInputText']"), "Cloud");
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Select User/Team
Events.click(webDriver, By.cssSelector("[data-testid='card-list']")); // Select Tier
Events.click(webDriver, By.cssSelector("[data-testid='saveManageTab']")); // Save
webDriver.navigate().back();
webDriver.navigate().refresh();
}
@Test
@Order(8)
public void checkBreadCrumb() throws InterruptedException {
openExplorePage();
Events.sendKeys(webDriver, By.cssSelector("[data-testid='searchBox']"), pipelineName);
Events.click(webDriver, By.cssSelector("[data-testid='data-name'][id ='sample_airflowdim_product_etl']"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='breadcrumb-link']"));
Events.click(webDriver, By.cssSelector("[data-testid='description-edit']")); // edit description
Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString());
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
for (int i = 1; i <= 3; i++) { //check topics in service
Events.click(webDriver, By.xpath("(//tr[@data-testid='column']//td[1]/a)" + "[" + i + "]")); // pipelines
Thread.sleep(waitTime);
webDriver.navigate().back();
}
@Test
@Order(8)
public void checkBreadCrumb() throws InterruptedException {
openExplorePage();
Events.sendKeys(webDriver, By.cssSelector("[data-testid='searchBox']"), pipelineName);
Events.click(webDriver, By.cssSelector("[data-testid='data-name'][id ='sample_airflowdim_product_etl']"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='breadcrumb-link']"));
Events.click(webDriver, By.cssSelector("[data-testid='description-edit']")); // edit description
Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString());
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
for (int i = 1; i <= 3; i++) { //check topics in service
Events.click(webDriver, By.xpath("(//tr[@data-testid='column']//td[1]/a)" + "[" + i + "]")); // pipelines
Thread.sleep(waitTime);
webDriver.navigate().back();
}
}
@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();
@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

@ -27,7 +27,7 @@
<version>0.7.0-SNAPSHOT</version>
</parent>
<artifactId>catalog-bin</artifactId>
<artifactId>openmetadata-dist</artifactId>
<packaging>pom</packaging>
<name>Catalog Distribution</name>
<description>Catalog binary distribution</description>
@ -43,6 +43,11 @@
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.openmetadata</groupId>
<artifactId>openmetadata-ui</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<properties>

133
openmetadata-ui/pom.xml Normal file
View File

@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>catalog</artifactId>
<groupId>org.openmetadata</groupId>
<version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openmetadata-ui</artifactId>
<properties>
<dropwizard.swagger.version>2.0.12-1</dropwizard.swagger.version>
<testng.version>7.4.0</testng.version>
<selenium.version>4.0.0</selenium.version>
</properties>
<dependencies>
<dependency>
<groupId>org.openmetadata</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.openmetadata</groupId>
<artifactId>catalog-rest-service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.artsok</groupId>
<artifactId>rerunner-jupiter</artifactId>
<version>2.1.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources/ui/dist</directory>
</resource>
<resource>
<directory>src/main/resources/json/data</directory>
</resource>
</resources>
<plugins>
<!-- Handle Compiling Frontend -->
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.11.0</version>
<!-- optional -->
<configuration>
<workingDirectory>src/main/resources/ui/</workingDirectory>
<installDirectory>target</installDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v12.16.1</nodeVersion>
<npmVersion>6.13.4</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm run-script build-check</id>
<goals>
<goal>npm</goal>
</goals>
<!-- optional: the default phase is "generate-resources" -->
<phase>prepare-package</phase>
<configuration>
<!-- optional: if not specified, it will run gulp's default task
(and you can remove this whole <configuration> section.) -->
<arguments>run-script build-check</arguments>
<!--arguments>build</arguments-->
</configuration>
</execution>
<execution>
<id>npm run-script build</id>
<goals>
<goal>npm</goal>
</goals>
<!-- optional: the default phase is "generate-resources" -->
<phase>prepare-package</phase>
<configuration>
<!-- optional: if not specified, it will run gulp's default task
(and you can remove this whole <configuration> section.) -->
<arguments>run-script build</arguments>
<!--arguments>build</arguments-->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -97,7 +97,7 @@
"pretty": "prettier . --config './.prettierrc' --write",
"build-check": "npm run lint",
"commit-check": "npm run pretty && npm run build-check && npm run build",
"json2ts": "./json2ts.sh ../json/schema ./src/generated && npm run lint:fix"
"json2ts": "./json2ts.sh ../../../../../catalog-rest-service/src/main/resources/json/schema ./src/generated && npm run lint:fix"
},
"browserslist": {
"production": [

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View File

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 447 B

After

Width:  |  Height:  |  Size: 447 B

View File

Before

Width:  |  Height:  |  Size: 557 B

After

Width:  |  Height:  |  Size: 557 B

Some files were not shown because too many files have changed in this diff Show More